सेमरडनीलैप्स का पता लगाएं


21

सेमरडनीलैप्स (जिसे हेटेरोपाइंड्रॉम्स, अर्ध-पलिंड्रोम्स, आधा-पलिंड्रोम्स, रिवर्सेग्राम्स, म्योनेरेथ्स, रिवर्सिबल एनाग्राम्स, वर्ड रिवर्सल या अनाडेस) के रूप में भी जाना जाता है, वे शब्द हैं जो पीछे की ओर वर्तनी में भी शब्द हैं। कुछ उदाहरण हैं:

  • वार्ड <=> ड्रा
  • मिस्ड <=> डेनिम
  • भागों <=> पट्टा

एक सकारात्मक पूर्णांक N (फ़ंक्शन तर्क या STDIN के माध्यम से) को देखते हुए , अंग्रेजी शब्दों की इस सूची से semordnilaps की एक सूची लौटाएं / आउटपुट करें , जिसमें बिल्कुल N अक्षर हैं। शब्दों की सूची को स्थानीय रूप से आपके कंप्यूटर पर एक पाठ फ़ाइल के रूप में सहेजा जा सकता है जिसे w.txt:। आप सूची को url से भी प्राप्त कर सकते हैं, लेकिन यह बाइट की गिनती में शामिल होगी।

नियम:

  1. Palindromes semordnilaps नहीं हैं! इसलिए, "दोपहर", "रोटर" और "रडार" शब्द को सूची में शामिल नहीं किया जाना चाहिए।
  2. केवल एक शब्द (एक सेमरडिलाप जोड़ी में) को सूची में शामिल किया जाना चाहिए। इसलिए, यदि "कुत्ता" सूची में है, तो "भगवान" नहीं होना चाहिए (यह कोई फर्क नहीं पड़ता कि कौन सा शामिल है।)
  3. यदि कोई सेमरडनीलैप्स नहीं हैं, तो आउटपुट एक रिक्त स्ट्रिंग होना चाहिए, 0, FALSE या कुछ और यह दर्शाता है कि कोई परिणाम नहीं था। परिणाम नहीं होने पर भी फ़ंक्शन को काम करना चाहिए।

यह कोड गोल्फ है इसलिए बाइट्स जीत में सबसे छोटा कोड है!


लीडरबोर्ड

इस पोस्ट के निचले हिस्से में स्टैक स्निपेट उत्तर से सूची बनाता है) क) प्रति भाषा में सबसे छोटे समाधान की सूची के रूप में और बी) एक समग्र लीडरबोर्ड के रूप में।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिखाई देता है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

## Language Name, N bytes

Nआपके सबमिशन का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

## Ruby, <s>104</s> <s>101</s> 96 bytes

यदि आप अपने हेडर में कई संख्याओं को शामिल करना चाहते हैं (जैसे कि आपका स्कोर दो फाइलों का योग है या आप दुभाषिया ध्वज दंड को अलग से सूचीबद्ध करना चाहते हैं), तो सुनिश्चित करें कि हेडर में वास्तविक अंक अंतिम संख्या है:

## Perl, 43 + 2 (-p flag) = 45 bytes

आप भाषा के नाम को एक लिंक भी बना सकते हैं जो बाद में स्निपेट में दिखाई देगा:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes



5
क्या एकवचन Emordnilapऔर बहुवचन नहीं होना चाहिए Semordnilap? ;)
फ्राईमईएग्गमैन

1
"पलिंड्रोम्स सेमरडनीलैप्स नहीं हैं!" वाह, वह वाक्य / गोली अधिक अस्पष्ट नहीं हो सकती है, लेकिन अब मैं देखता हूं कि आपका क्या मतलब है। शब्द जो स्वयं उलटे होते हैं, वे सेमरडनीलैप नहीं होते हैं।
बिल्ली

जवाबों:


10

पायथ , 23 (18 कोड, 5 आवश्यक STDIN)

J'f&qlTQ&}_TJ>_TTJ

यह एक काफी सरल उपाय है।

Jशब्दों की सूची संग्रहीत करता है। फिर हम शब्दों की सूची ( f J) शब्द की लंबाई पर इनपुट ( qlTQ), उल्टे शब्द की सूची में ( }_TJ), और शब्द के शब्द ( >_TT) से अधिक होने पर उलट फ़िल्टर करते हैं । अंतिम शर्त यह सुनिश्चित करती Tहै कि तालमेल न हो और जोड़ी में से केवल एक ही मुद्रित हो। परिणामी सूची मुद्रित की जाती है।

जिस तरह से Pyth काम करता है, फाइल खोलने का एकमात्र तरीका STDIN पर अपना नाम प्राप्त करना है। यही कारण है कि मैंने w.txtअपने स्कोर में STDIN बाइट्स में से 5 को गिना है ।

उदाहरण रन:

$ pyth -c "J'f&qlTQ&}_TJ>_TTJ" <<< '6
w.txt'
['animal', 'denier', 'diaper', 'drawer', 'pupils', 'recaps', 'redraw', 'sleets', 'snoops', 'sports']

10

रूबी, 74 बाइट्स

f=->n{i=IO.read('w.txt').split
p *i&[f.reverse]if f.size==n while f=i.pop}

तत्वों को हटाकर सूची में Iterates, जो दोनों palindromes से बचा जाता है और "तनावग्रस्त" और "डेसर्ट" दोनों को आउटपुट करता है। फ़ंक्शन के लिए एक ही चर नाम का उपयोग करना और पुनरावृत्त एक रूबी सिंटैक्स क्विक के आसपास हो जाता है: भले ही f=i.popपहले मूल्यांकन किया गया हो f.reverse, लाइन तब तक पार्स नहीं होगी जब तक कि fपहले से ही कुछ का मतलब न हो। मैं भी इस्तेमाल कर सकता हूं p


4

बैश 134 157 118 बाइट्स

f () { comm -12 <(sort w.txt) <(rev w.txt|sort)|while read w; do ((${#w}==$1))&&[[ $w<$(rev<<<$w) ]]&&echo $w; done; }

यह एक गंभीर प्रविष्टि नहीं है, बल्कि ब्रायन के बैश जवाब के जवाब में है । इस तरह से मैं बैश में इस तरह की प्रोग्रामिंग करने के बारे में सोचना चाहता हूं - जितना संभव हो सके बैश का उपयोग करके, और अंतर्निहित टूल को सभी काम करने दें।


आपको वैसे भी कॉम से शब्द और उसका प्रतिबिंब दोनों मिलेंगे, आप बस "$ w" प्रतिध्वनित कर सकते हैं और अतिरिक्त प्रकार और पूंछ से परेशान नहीं हो सकते। यदि आप ऐसा करते हैं, तो परिणाम पहले से ही हल होना चाहिए, इसलिए अंतिम प्रकार भी हटाया जा सकता है।
ओरियन

मैं अनुसरण नहीं करता। मैं आपके दृष्टिकोण में कटौती कैसे करूं?
एरोन डेविस

इसके अलावा, मैं पूरी तरह से palindromes को दूर करने के लिए भूल गया। फिक्स्ड।
एरोन डेविस

क्षमा करें, नींद की कमी ... आपको वास्तव में उनमें से केवल एक को रखने के लिए रिवर्स के साथ तुलना करने की आवश्यकता है, लेकिन आपको पैलिंड्रोम्स के बारे में परवाह नहीं है और मेरी बाकी टिप्पणियां अभी भी मान्य हैं। और अब जब आप इसका उल्लेख करते हैं, तो बैश में एक स्ट्रिंग तुलना ऑपरेटर होता है, इसलिए &&[[ $w > $(rev<<<$w) ]]&& echo $wअभी भी बचता है sort|tail -1। इसके साथ, मुझे लगता है कि आप अंतिम प्रकार और अद्वितीय को भी छोड़ सकते हैं, क्योंकि यह पैलिंड्रोम्स को हटा देता है और केवल एक शब्द को आउटपुट करता है।
ओरियन

इसके अलावा, शुरुआत में एक बेकार बिल्ली: <(sort w.txt)ठीक है।
ओरियन

4

पायथन, 126 125 120 बाइट्स

N=input()
J=open("w.txt").read().split()
for c in set(J):
 if N==len(c)and c!=c[::-1]and c[::-1]in J:print c;J.remove(c)

बहुत ही सीधा साधा समाधान।


यह परिभाषित करने के लिए छोटा प्रतीत होता है k=c[::-1]। इसके अलावा, क्या आप set()केवल दूसरी बार फोन नहीं कर सकते हैं? मुझे नहीं लगता कि फ़ाइल में दोहराव हैं?
फ्राईअमईएग्मैन

@FryAmTheEggman: वास्तव में इसे असाइन करने के लिए 11 अक्षर k(9 को परिभाषा के लिए 1 और न्यूलाइन प्लस 1 के लिए स्पेस के लिए) लेना होगा, लेकिन मैं केवल 10 वर्णों को बचाऊंगा (6 के लिए बाहर ले जाऊंगा [::-1]लेकिन 1 कारण जोड़ूंगा तो मुझे एक स्थान की आवश्यकता होगी)। के बारे में set, मुझे Jएक सेट होने की आवश्यकता है क्योंकि मैं इसे इस्तेमाल किए गए शब्दों को हटाकर नो-ड्यूप नियम को संतुष्ट करता हूं
क्लाउडीयू

N==len(c)andएक स्थान को बचाने के लिए स्विचन ।
isaacg

@isaacg: आह हाँ, Ty
Claudiu

आप कम हैं =- होना चाहिए ==
isaacg

3

CJam, 48 47 45 42 38 बाइट्स

चूंकि URL की गणना की जानी है, इसलिए मैं उसी URL शॉर्टनर का उपयोग कर रहा हूं जो ऑप्टिमाइज़र के रूप में है।

"ri.ms/§"gDcN+/{,ea~i=},_Wf%&{_W%>},N*

§एक्स्टेंडेड ASCII का हिस्सा है, तो कोड में प्रत्येक चरित्र एक एकल बाइट में इनकोडिंग जा सकता है।

जैसा कि ऑप्टिमाइज़र के मामले में, आपको जावा दुभाषिया का उपयोग करना होगा और इसे स्थानीय रूप से किसी फ़ाइल से, कहना semordnilap.cjam, और फिर चलाना होगा

java -jar cjam-0.6.2.jar semordnilap.cjam <N>

इसलिए इनपुट को कमांड-लाइन तर्क के रूप में दिया जाता है।

यह कैसे काम करता है (थोड़ा पुराना):

"Prepare word list:";
"ri.ms/§"gDcN+/ 
"ri.ms/§"g      "Fetch list from shortened URL.";
          DcN+  "Create \r\n string.";
              / "Split input into lines.";

"Process input:";
{,ea~i=},
{      }, "Filter the list.";
 ,        "Get word length.";
  ea      "Push command-line arguments.";
    ~     "Unwrap array.";
     i    "Convert to integer.";
      =   "Check equality.";

"Find all palindromes and semordnilaps:";
_Wf%&
_     "Duplicate list.";
 Wf%  "Reverse each line.";
    & "Set intersection.";

"Remove duplicates and palindromes:";
{_W%>},N*
{    },   "Filter list.";
 _W%      "Duplicate word, reverse.";
    >     "Check lexicographic order.";
       N* "Join with newlines.";

परिणामी स्ट्रिंग स्वचालित रूप से कार्यक्रम के अंत में मुद्रित होती है।


3

जावा, 280 218 बाइट्स

प्रतियोगिता के बाकी की तुलना में, मैं बिल्कुल पता नहीं है, तो यह एक अच्छा स्कोर है।

void a(int n)throws Exception{List<String>l=Files.readAllLines(Paths.get("w.txt"));for(String s:l){String c=new StringBuilder(s).reverse()+"";if(s.length()==n&&c.compareTo(s)>0&&l.contains(c)){System.out.println(s);}}}

विस्तारित:

void a(int n)throws Exception{
    List<String>l=Files.readAllLines(Paths.get("w.txt"));
    for(String s:l){
        String c=new StringBuilder(s).reverse()+"";
        if(s.length()==n&&c.compareTo(s)>0&&l.contains(c)){
            System.out.println(s);
        }
    }
}

एक साथ palindromes और डुप्लिकेट को अनदेखा करने के लिए ComparTo () का उपयोग करता है।


2
जावा हमेशा एक गोल्फ प्रतियोगिता में उड़ा देगा।
रोडोल्फो डायस

मैंने पहले कभी नहीं देखा Files.readAllLines(Paths.get("w.txt"))। यह एक उपयोगी ट्रिक है।
यपनिप 18

2

सीजेएम, 68 बाइट्स

"www.ri.ms/§"gDc-N/{_,ea~~=\_W%=!*},:Q{_W%aQ\/,({Q\a-:Q;1}{;0}?},N*

आप से संकलक के जावा संस्करण को डाउनलोड करना होगा यहाँ और एक फ़ाइल बुलाया words.cjam में उपरोक्त कोड को बचाने (किसी भी नाम हो सकता है)। फिर जैसे कोड चलाते हैं

java -jar cjam-0.6.2.jar <file_name> <input_number> [> <output_file_name>]

उदाहरण के लिए N = 8,

java -jar cjam-0.6.2.jar words.cjam 8 > out.txt  

जावा-यह एक परिचित नहीं है। कृपया इसे JAVA वर्तनी न दें।
फ़ूजएक्सएक्सएल

@FUZxxl यह स्व-संपादन योग्य है ..
ऑप्टिमाइज़र

मैं पुलिस अधिकारी नहीं हूं। वर्तनी के बारे में लोगों की अलग-अलग राय है और मैं आपकी राय का सम्मान करता हूं। मैं केवल आपको सुझाव देता हूं कि आप जावा को स्पेल न करें जैसे कि यह एक परिचित था, मैं आप पर एक अलग स्पेलिन को मजबूर नहीं करना चाहता।
फूजएक्सएक्सएल

@FUZxxl मैं वास्तव में मिड नहीं करता हूं: D
ऑप्टिमाइज़र

2

नोड.जेएस, 172 बाइट्स

समारोह:

function d(n){return(require('fs').readFileSync("w.txt")+"").match(RegExp(("b"+Array(n+1).join("(.)")+"b(?=(.|s)*b"+"87654321".substr(-n)+"b)").replace(/\w/g,"\\$&"),"g"))}

परिक्षण:

console.log(d(+process.argv[2]));
// run from command line like this:
// node main 4
// where
//   main is js file name
//   4    is length

2

कश्मीर, 59 बाइट्स

{*+?{x@<x}'+(w;r)@\:&(x=#:'w)&(~w~'r)&w in r:|:'w:0:`w.txt}

बहुत सीधा। सूची पढ़ें, रिवर्स सूची का निर्माण करें, उनका चौराहा लें, पलिंड्रोम्स को फ़िल्टर करें, आवश्यक गणना में फ़िल्टर करें, जोड़े को सॉर्ट करें और घटाएं।


2

रूबी, 95 बाइट्स

f=->n{l=[]
(a=IO.read"w.txt").split.map{|w|a[w]=?.
w.size==n&&a[/^#{r=w.reverse}\s$/]&&l<<w}
l}

व्याख्या

  • इनपुट को लंबोदर के तर्क के रूप में लिया जाता है। यह एक उम्मीद Integer
  • फ़ाइल को मेमोरी के रूप में पढ़ें String( a)।
  • लूप गर्त Arrayसभी शब्दों के (बिना newlines के)।
    • से शब्द निकालें a
    • करने के लिए शब्द योग्यता जोड़े Array l
  • वापसी l

Arrayकोई योग्य शब्द नहीं मिलने पर खाली लौटा दिया जाता है।


1

Node.js, CoffeeScript, 132 बाइट्स

f=(n)->(require('fs').readFileSync('w.txt')+'').split('\n').filter((s,i,f)->s.length==n&&f.indexOf(s.split('').reverse().join(''))>i)

नोड.जेएस, 162 बाइट्स

function a(n){return(require('fs').readFileSync('w.txt')+'').split('\n').filter(function(s,i,f){return s.length==n&&f.indexOf(s.split('').reverse().join(''))>i})}

क्रोम देव उपकरण कंसोल, 111 बाइट्स (डाउनलोड पृष्ठ पर)

f=(n=>$('pre').innerText.split('\n').filter((x,i,a)=>x.length==n&&a.indexOf(x.split('').reverse().join(''))>i))

सभी संस्करण लंबाई के सभी सेमरडनीलैप्स की एक सरणी लौटाते हैं n

नोड.जेएस, 162 बाइट्स

प्रिंट सभी सेमरडनीलैप्स:

function a(n){(require('fs').readFileSync('w.txt')+'').split('\n').map(function(s,i,f){s.length==n&&f.indexOf(s.split('').reverse().join(''))>i&&console.log(s)})}

1

जूलिया, 101 बाइट्स

k=split(readall("w.txt"))
for(i=k)
([]!=(l=find(x->x==reverse(i)&&x!=i,k)))&&(println(i);k[l]="")
end

यह वास्तव में काम करना चाहिए ...


1

मेथेमेटिका, 105 बाइट्स

F[f_,n_]:=(W=StringSplit@Import@f;Select[W,StringLength@#==n&&MemberQ[W,r@#]&&Order[r@#,#]==1&&r@#!=# &])

कभी-कभी आयात स्वचालित रूप से लाइनों की सूची की सूची में पाठ को विभाजित कर देगा, या इसे सीएसवी या टीएसवी के रूप में मान सकता है। अन्य समय में, आयात फ़ाइल की सामग्री को एक स्ट्रिंग में पढ़ेगा। आयात ने परीक्षण डेटा के लिए उत्तरार्द्ध किया।

परीक्षण


0

दे घुमा के

f() {
  w=($(cat "${1}"))
  for ((i=0;i<=${#w[@]};i++)); do
    if ((${#w[$i]} == $2)); then
      r=
      for((x=${#w[$i]}-1;x>=0;x--)); do
        r="$r${w[$i]:$x:1}";
      done
      if [[ ${w[$i]} != ${r} ]] && grep -qw $r "${1}"; then
        echo "${w[$i]}, ${r}"
      fi
      unset w[$i]
    fi
  done
}

परीक्षण ...

f /usr/share/dict/words 5

debut, tubed
decaf, faced
decal, laced
deeps, speed
denim, mined
devil, lived
draws, sward
faced, decaf
keels, sleek
knits, stink
laced, decal
lager, regal
leper, repel
lever, revel
lived, devil
loops, spool
loots, stool
mined, denim
parts, strap
peels, sleep
pools, sloop
ports, strop
rebut, tuber
regal, lager
remit, timer
repel, leper
revel, lever
sleek, keels
sleep, peels
sloop, pools
smart, trams
snaps, spans
snips, spins
spans, snaps
speed, deeps
spins, snips
spool, loops
spots, stops
sprat, tarps
stink, knits
stool, loots
stops, spots
strap, parts
straw, warts
strop, ports
sward, draws
tarps, sprat
timer, remit
trams, smart

2
मैं इस बहुत golfed नहीं है लगता है ..? यह स्टैक ओवरफ़्लो पर एक अच्छी जवाब होगा (अगर यह कुछ टिप्पणियों और स्पष्टीकरण था)।
Stewie ग्रिफिन

1
सहमति, इस पार्टी में इस को हल करने में मेरी पहली यात्रा थी। मैं थक गया संभव के रूप में पठनीय के रूप में यह सुनिश्चित करने के लिए। लेकिन गोल्फ चला जाता है जहाँ तक। ) -: इसे और अधिक की तरह मैं एक सममूल्य 3 पर एक 9 गोली मार दी है
ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.