5318008 - कैलकुलेटर के साथ मज़ा


32

दुनिया भर के स्कूलों में, बच्चे अपने एलसीडी कैलकुलेटर में एक नंबर टाइप करते हैं, इसे उल्टा करते हैं और 'बूबीज़' शब्द बनाने के बाद हँसी में फट जाते हैं। बेशक, यह सबसे लोकप्रिय शब्द है, लेकिन कई अन्य शब्द भी हैं जिनका उत्पादन किया जा सकता है।

सभी शब्द 10 अक्षरों से कम लंबे होने चाहिए, हालांकि (शब्दकोश में हालांकि इससे लंबे शब्द हैं, इसलिए आपको अपने कार्यक्रम में एक फ़िल्टर करना होगा)। इस शब्दकोश में, कुछ बड़े शब्द हैं, इसलिए सभी शब्दों को लोअरकेस में बदल दें।

एक अंग्रेजी भाषा के शब्दकोश का उपयोग करते हुए, संख्याओं की एक सूची बनाएं जो एक एलसीडी कैलकुलेटर में टाइप की जा सकती है और एक शब्द बनाती है। सभी कोड गोल्फ सवालों के साथ, इस कार्य को पूरा करने वाला सबसे छोटा प्रोग्राम जीत जाता है।

अपने परीक्षणों के लिए, मैंने टाइप करके एकत्रित UNIX शब्द सूची का उपयोग किया:

ln -s /usr/dict/words w.txt

या वैकल्पिक रूप से, इसे यहां प्राप्त करें

उदाहरण के लिए, ऊपर की छवि 35007कैलकुलेटर में संख्या टाइप करके और इसे उल्टा करके बनाई गई थी ।

पत्र और उनके संबंधित नंबर:

  • बी :8
  • जी :6
  • एल :7
  • मैं :1
  • :0
  • s :5
  • z :2
  • :4
  • :3

ध्यान दें कि यदि संख्या शून्य से शुरू होती है, तो उस शून्य के बाद एक दशमलव बिंदु आवश्यक है। संख्या को दशमलव बिंदु से शुरू नहीं करना चाहिए।

मुझे लगता है कि यह मार्टिनबटनर का कोड है, बस आप इसके लिए श्रेय लेना चाहते थे :)

/* Configuration */

var QUESTION_ID = 51871; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";

/* App */

var answers = [], page = 1;

function answersUrl(index) {
  return "http://api.stackexchange.com/2.2/questions/" +  QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}

function getAnswers() {
  jQuery.ajax({
    url: answersUrl(page++),
    method: "get",
    dataType: "jsonp",
    crossDomain: true,
    success: function (data) {
      answers.push.apply(answers, data.items);
      if (data.has_more) getAnswers();
      else process();
    }
  });
}

getAnswers();

var SIZE_REG = /\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/;
var NUMBER_REG = /\d+/;
var LANGUAGE_REG = /^#*\s*([^,]+)/;

function shouldHaveHeading(a) {
  var pass = false;
  var lines = a.body_markdown.split("\n");
  try {
    pass |= /^#/.test(a.body_markdown);
    pass |= ["-", "="]
              .indexOf(lines[1][0]) > -1;
    pass &= LANGUAGE_REG.test(a.body_markdown);
  } catch (ex) {}
  return pass;
}

function shouldHaveScore(a) {
  var pass = false;
  try {
    pass |= SIZE_REG.test(a.body_markdown.split("\n")[0]);
  } catch (ex) {}
  return pass;
}

function getAuthorName(a) {
  return a.owner.display_name;
}

function process() {
  answers = answers.filter(shouldHaveScore)
                   .filter(shouldHaveHeading);
  answers.sort(function (a, b) {
    var aB = +(a.body_markdown.split("\n")[0].match(SIZE_REG) || [Infinity])[0],
        bB = +(b.body_markdown.split("\n")[0].match(SIZE_REG) || [Infinity])[0];
    return aB - bB
  });

  var languages = {};
  var place = 1;
  var lastSize = null;
  var lastPlace = 1;
  answers.forEach(function (a) {
    var headline = a.body_markdown.split("\n")[0];
    //console.log(a);
    var answer = jQuery("#answer-template").html();
    var num = headline.match(NUMBER_REG)[0];
    var size = (headline.match(SIZE_REG)||[0])[0];
    var language = headline.match(LANGUAGE_REG)[1];
    var user = getAuthorName(a);
    if (size != lastSize)
      lastPlace = place;
    lastSize = size;
    ++place;
    answer = answer.replace("{{PLACE}}", lastPlace + ".")
                   .replace("{{NAME}}", user)
                   .replace("{{LANGUAGE}}", language)
                   .replace("{{SIZE}}", size)
                   .replace("{{LINK}}", a.share_link);
    answer = jQuery(answer)
    jQuery("#answers").append(answer);

    languages[language] = languages[language] || {lang: language, user: user, size: size, link: a.share_link};
  });

  var langs = [];
  for (var lang in languages)
    if (languages.hasOwnProperty(lang))
      langs.push(languages[lang]);

  langs.sort(function (a, b) {
    if (a.lang > b.lang) return 1;
    if (a.lang < b.lang) return -1;
    return 0;
  });

  for (var i = 0; i < langs.length; ++i)
  {
    var language = jQuery("#language-template").html();
    var lang = langs[i];
    language = language.replace("{{LANGUAGE}}", lang.lang)
                       .replace("{{NAME}}", lang.user)
                       .replace("{{SIZE}}", lang.size)
                       .replace("{{LINK}}", lang.link);
    language = jQuery(language);
    jQuery("#languages").append(language);
  }

}
body { text-align: left !important}

#answer-list {
  padding: 10px;
  width: 50%;
  float: left;
}

#language-list {
  padding: 10px;
  width: 50%px;
  float: left;
}

table thead {
  font-weight: bold;
}

table td {
  padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="answer-list">
  <h2>Leaderboard</h2>
  <table class="answer-list">
    <thead>
      <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr>
    </thead>
    <tbody id="answers">

    </tbody>
  </table>
</div>
<div id="language-list">
  <h2>Winners by Language</h2>
  <table class="language-list">
    <thead>
      <tr><td>Language</td><td>User</td><td>Score</td></tr>
    </thead>
    <tbody id="languages">

    </tbody>
  </table>
</div>
<table style="display: none">
  <tbody id="answer-template">
    <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
  </tbody>
</table>
<table style="display: none">
  <tbody id="language-template">
    <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
  </tbody>
</table>


4
पहले नंबर के बाद एक दशमलव बिंदु का उपयोग कर सकते हैं, भले ही इसकी आवश्यकता न हो?
डेनिस

1
हम टाइप करने के लिए है 0.7734के लिए नमस्ते या होगा .7734स्वीकार्य हो?
डेनिस

3
अगर ऊपरी शब्द, विराम चिह्न, आदि के साथ शब्द हैं तो सही व्यवहार क्या है?
पीटर टेलर

1
@ डेनिस 0.7734की आवश्यकता है
बीटा

4
उन शब्दों के बारे में जो दशमलव के बाद एक अनुगामी शून्य की आवश्यकता है? उदाहरण के लिए, दशमलव के बादoligo एक अनुगामी शून्य की आवश्यकता होती है :0.6170
श्री लामा

जवाबों:


7

CJam, 44 42 बाइट्स

r{el"oizehsglb"f#W%"0."a.e|N+_,B<*_W&!*r}h

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

कमांड लाइन से प्रोग्राम चलाने के लिए, जावा दुभाषिया डाउनलोड करें और निष्पादित करें:

java -jar cjam-0.6.5.jar 5318008.cjam < /usr/share/dict/words

यह काम किस प्रकार करता है

r            e# Read a whitespace-separated token from STDIN.
{            e# While loop:
 el          e#   Convert to lowercase.
 "oizehsglb" e#   Push that string.
 f#          e#   Get the index of each character from the input in that string.
             e#   This pushes -1 for "not found".
 W%          e#   Reverse the resulting array.
 "0."a       e#   Push ["0."].
 .e|         e#   Vectorized logical NOT. This replaces an initial 0 with "0.".
 N+          e#   Append a linefeed.
 _,B<*       e#   Repeat the array (array.length < 11) times.
 _W&!*       e#   Repeat the array !(array.intersection(-1)) times.
 r           e#   Read a whitespace-separated token from STDIN.
}h           e# If the token is not empty, repeat the loop.

9

बाश + कोरुटिल्स, 54

फिर, गोल्फ की मदद के लिए @TobySpeight का धन्यवाद।

rev|tr oizehsglb 0-8|sed '/.\{11\}\|[^0-9]/d;s/^0/&./'

इनपुट शब्द सूची STDIN से ली गई है:

$ ./5318008.sh < /usr/share/dict/words | head
8
38
338
5338
638
5638
36138
31738
531738
7738
$ 

"बेली" और "बिलीज़" शब्द हैं? जितना आप जानते हैं ...
clismique

6

अजगर 2, 271 216 211 205 बाइट्स

यह एकमात्र विचार है जो मैंने अब तक किया है .. मैं इसे अपडेट करूँगा जब मैं कुछ और सोचूंगा! मुझे लगता है कि हमें एक फ़ाइल से पढ़ने की जरूरत है, लेकिन अगर मुझे पता नहीं है तो मैं अपडेट कर सकता हूं :)

मुझे 55 बाइट बचाने के लिए डेनिस का बड़ा धन्यवाद :)

6 बाइट बचाने के लिए Sp3000 का भी धन्यवाद :)

d,f,g='oizehsglb',[x.lower()for x in open('w.txt').read().split('\n')if len(x)<10],[]
for x in f:
 c=x[::-1]
 for b in d:c=c.replace(b,`d.find(b)`)
 g=[g,g+[['0.'+c[1:],c][c[0]!='0']]][c.isdigit()]
print g

मैं बहुत सारे पायथन को नहीं जानता, लेकिन क्या ऐसा कुछ "oizehsglb".index(b)छोटा नहीं होगा ?
डेनिस

3
d[b] == "oizehsglb".index(b)। संभवतः एक कलाकार को स्ट्रिंग / चरित्र की कमी है।
डेनिस

1
ओह, वाह, यह मेरे लिए कभी नहीं हुआ कि हम जिन नंबरों को बदलने में सक्षम थे उनके क्रम में संख्यात्मक मान थे .. हाँ, यह निश्चित रूप से काम करेगा! धन्यवाद!
काडे

1
परीक्षण नहीं किया गया, लेकिन: 1) 2 .findसे छोटा है .index, आपके पास कौन से संस्करण पर निर्भर करता है, कम से कम 2.7.10 openमें एक मोड तर्क के बिना चूक r, 3) क्या सिर्फ for x in open(...)काम नहीं करता है ? (एक अनुगामी न्यूलाइन को हटाने की आवश्यकता हो सकती है) यदि ऐसा नहीं होता है, तो इससे .split('\n')छोटा है.splitlines()
Sp3000

1
इसके अलावा g+=[['0.'+c[1:],c][c[0]!='0']]*c.isdigit(), और आप में पीछे से कुछ और बचा सकता है fतो कर for c in fके बजाय होने c=x[::-1]। इसके अलावा आप केवल fएक बार उपयोग करते हैं , इसलिए आपको इसे एक चर के रूप में सहेजने की आवश्यकता नहीं है
Sp3000

6

जावास्क्रिप्ट (ईएस 7), 73 बाइट्स

यह ES7 केवल 73 बाइट्स में किया जा सकता है:

s=>[for(w of s)'oizehsglb'.search(w)].reverse().join``.replace(/^0/,'0.')

Ungolfed:

var b = function b(s) {
    return s.length < 10 && /^[bglioszhe]*$/.test(s) ? s.replace(/./g, function (w) {
        return 'oizehsglb'.search(w);
    }).reverse().join('').replace(/^0/, '0.') : '';
};

उपयोग:

t('hello'); // 0.7734
t('loose'); // 35007
t('impossible'); //

समारोह:

t=s=>                       // Create a function 't' with an argument named 's' 
   [                        // Return this array  comprehension
     for(i of s)            // Loops through each letter in the string
     'oizehsglb'.search(w)  // Converts it to it's corresponding number
   ]
  .reverse().join``         // Reverse the array and make it a string
  .replace(/^0/,'0.')       // If the first character is a 0, add a decimal after it

मैंने इसे UNIX वर्डलिस्ट पर चलाया और परिणामों को एक पेस्ट बिन में रखा:

परिणाम

फ़ायरफ़ॉक्स पर परिणाम प्राप्त करने के लिए उपयोग किया जाने वाला कोड :

document.querySelector('pre').innerHTML.split('\n').map(i => t(i.toLowerCase())).join('\n').replace(/^\s*[\r\n]/gm, '');

क्या होता है t('Impossible')?
आर्टुरो टॉरेस सेंचेज

@ ArturoTorresSánchez आप सही हैं, मैंने तय किया है कि
डाउन

is join`` ES2015 या क्या यह पूर्व-ES2015 है?
वैलेस्ट वेस्ट

@WallyWest यह एक ES6 फीचर है। यह सबसे प्रमुख ब्राउज़रों में समर्थित है
डाउनगोट

इसमें ES7 विशिष्ट क्या है?
अर्जुन

5

पायथन 2, 121 बाइट्स

for s in open("w.txt"):
 L=map("oizehsglb".find,s[-2::-1].lower())
 if-min(L)<1>len(L)-9:print`L[0]`+"."[L[0]:]+`L`[4::3]

मान लेता है कि शब्दकोश फ़ाइल w.txtएक अनुगामी न्यूलाइन के साथ समाप्त होती है, और कोई खाली रेखाएं नहीं होती हैं।


3

GNU sed, 82

(1 के लिए सहित) -r )

गोल्फ की मदद के लिए @TobySpeight का शुक्रिया।

s/$/:/
:
s/(.)(:.*)/\2\1/
t
s/://
y/oizehsglb/012345678/
/.{11}|[^0-9]/d;s/^0/&./

इनपुट शब्द सूची STDIN से ली गई है:

$ sed -rf 5318008.sed /usr/share/dict/words | tail
3705
53705
1705
0.705
50705
5705
505
2
0.02
5002
$ 

2

टीआई-बेसिक, 75 88 बाइट्स

2 संपादित करें: कोई बात नहीं, यह अभी भी तकनीकी रूप से अमान्य है, क्योंकि यह केवल एक समय में एक शब्द (एक शब्दकोश नहीं) को स्वीकार करता है। मैं इसे इनपुट के रूप में एक से अधिक शब्दों की अनुमति देने के लिए ठीक करने का प्रयास करूंगा ...

संपादित करें: उफ़; मैंने मूल रूप से इसे अंत में एक .0 दिखाया, अगर अंतिम संख्या 0 थी, अन्य तरीके से नहीं। फिक्स्ड, हालांकि यह थोड़े खराब वर्कअराउंड है (0 के साथ शुरू होने पर संख्या के साथ "0." प्रदर्शित करता है, अन्यथा एक ही स्थान पर दो स्थान प्रदर्शित करता है)। उज्ज्वल पक्ष पर, यह "ओटो" (दोनों 0 प्रदर्शित करता है) जैसे शब्दों को सही ढंग से संभालता है क्योंकि यह वास्तव में एक दशमलव संख्या प्रदर्शित नहीं कर रहा है!


मैं ऐसा करने के लिए एक बेहतर भाषा के बारे में नहीं सोच सकता। निश्चित रूप से अधिक गोल्फ हो सकता है, लेकिन मैं अभी बहुत थक गया हूं। टिल्ड निगेटिव सिंबल है [a( - ) बटन] है।

इनपुट कैलकुलेटर के उत्तर चर से लिया गया है, जिसका अर्थ है जो भी अंतिम मूल्यांकन किया गया था (जैसे _इंटरैक्टिव पायथन शेल में) तो आपको होमस्क्रीन पर एक स्ट्रिंग टाइप करना होगा (उद्धरण चिह्न चालू है ALPHA+), दबाएं ENTER, फिर प्रोग्राम चलाएं। वैकल्पिक रूप से, आप अलग-अलग कमांड के लिए एक कोलन का उपयोग कर सकते हैं, इसलिए यदि आप प्रोग्राम को नाम देते हैं, तो "CALCTEXT" कहते हैं, और आप इसे स्ट्रिंग "हेलो" पर चलाना चाहते हैं, आप "HELLO":prgmCALCTEXTउन्हें अलग से करने के बजाय टाइप कर सकते हैं ।

seq(inString("OIZEHSGLB",sub(Ans,X,1))-1,X,length(Ans),1,~1
Text(0,0,sub("0.  ",1+2(0 or Ans(1)),2),sum(seq(Ans(X)10^(dim(Ans)-X),X,1,dim(Ans

2

पायथन 2, 147 158 156 बाइट्स

मुझे यह '0.' याद आ रहा था आवश्यकता। आशा है कि अब यह सब ठीक काम करेगा।

संपादित करें : हटाए गए ".readlines ()" और यह अभी भी काम करता है; पी

edit2 : कुछ रिक्त स्थान हटाए और प्रिंट को 3rd लाइन पर ले जाएं

edit3 : Sp3000 के लिए 2 बाइट्स का धन्यवाद सहेजा गया (प्रिंट के बाद हटाए गए स्थान और 'इंडेक्स' को 'ढूंढने' के लिए बदल दिया गया)

for x in open("w.txt"):
 a="oizehsglb";g=[`a.find(b)`for b in x[::-1].lower()if b in a]
 if len(g)==len(x)-1<10:
  if g[0]=="0":g[0]="0."
  print"".join(g)

1

पायथन 2, 184 174 बाइट्स

for s in open('w.txt'):
 try:a=''.join(map(lambda c:dict(zip('bglioszhe','867105243'))[c],s[:-1][::-1]));a=[a,'0.'+a[1:]][a[0]=='0'];print['',''.join(a)][len(s)<11]
 except:0

1

रूबी 2, 88 86 बाइट्स

x="oizehsglb"
puts$_.tr(x,"0-8").reverse.sub /^0/,"0." if$_.size<11&&$_.delete(x)<?A

बाइट गणना में lnकमांड लाइन पर विकल्पों के लिए 2 शामिल हैं :

$ ruby -ln 5318008.rb wordlist.txt

इस मामले में के ==""साथ प्रतिस्थापित किया जा सकता है <?A। और के gsub()रूप sub()में पर्याप्त के लिए कोई ज़रूरत नहीं है।
मैनटवर्क

1

सी, 182 172 169/181 172 बाइट्स

char*l="oizehsglb",S[99],*s,*t;main(x){for(;t=S+98,gets(S);){for(s=S;*s;s++)if(x=strchr(l,*s|32))*--t=48+x-(int)l;else break;*t==48?*t--=46,*t=48:0;*s||s-S>10?0:puts(t);}}

विस्तारित

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *l="oizehsglb",S[99],*s,*t;

main(int x, char **argv)
{
    for (;t=S+98,gets(S);){
        for (s=S;*s;s++)
            if (x=strchr(l,*s|32))
                *--t=48+x-(int)l;
            else
                break;
        if (*t==48) {       // '0'
            *t--=46;        // '.'
            *t=48;  // '0'
        }

        if (!*s && s-S <= 10)
            puts(t);
    }
}

लिंक किए गए शब्दों का उपयोग करना।

$ ./a.out  < words.txt  | tail
2212
0.2
0.802
0.602
7702
37702
0.02
321607002
515002
0.02002

$ ./a.out < words.txt   | wc -l
 550

1
*s|32इस संदर्भ में लोअरकेस रूपांतरण के रूप में काम नहीं करेंगे ?
हेगन वॉन एटिजन

महान विचार! धन्यवाद!
कुछ यूजर

1

हास्केल, आयात के बिना 175 बाइट्स (आयात के साथ 229 बाइट्स)

प्रासंगिक कोड (फ़ाइल Calc.hs में कहें):

import Data.Char(toLower)
import Data.Maybe(mapMaybe)
s="oizehsglb\n"
g('0':r)="0."++r
g x=x
main=mapM_(putStrLn.g.reverse.mapMaybe(`lookup`zip s['0'..'8'])).filter(\l->length l<10&&all(`elem`s)l).lines.map toLower=<<getContents

$ cat /usr/share/dict/words | runghc Calc.hs

0

जावा, 208 200 176 बाइट्स

String f(char[] w){String o="",l="oizehsglb";for(int i=w.length;i>0;i--)o+=l.indexOf(w[i-1]|32);if(o.contains("-")||o.length()>8)o="  ";return o.charAt(0)+"."+o.substring(1);}

विस्तारित

String f(char[] w)
{
    String o = "", l = "oizehsglb";
    for(int i = w.length; i > 0; i--)
        o+=l.indexOf(w[i-1]|32);
    if(o.contains("-")||o.length() > 8)
        o = "  ";
    return o.charAt(0) + "." + o.substring(1);
}

यह हमेशा दशमलव जोड़ता है, और जब अमान्य रिटर्न ""। लेकिन अन्यथा इस तरह से काम करना चाहिए। : पी

धन्यवाद @ LegionMammal978!


आप को बदलने के द्वारा 7 बाइट्स बचा सकते हैं ;String l=करने के लिए ,l=और =o+करने के लिए +=
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.