5318008 - ক্যালকুলেটরগুলির সাথে মজা


32

বিশ্বজুড়ে স্কুলগুলিতে, শিশুরা তাদের এলসিডি ক্যালকুলেটরে একটি সংখ্যা টাইপ করে, এটিকে উল্টে দেয় এবং 'বুবিস' শব্দটি তৈরি করার পরে হাসিতে ফেটে যায়। অবশ্যই, এটি সর্বাধিক জনপ্রিয় শব্দ, তবে আরও অনেক শব্দ রয়েছে যা তৈরি করা যেতে পারে।

সমস্ত শব্দ অবশ্যই 10 বর্ণের কম দীর্ঘ হতে হবে (যদিও অভিধানে এর চেয়ে শব্দ দীর্ঘ থাকে তবে আপনাকে অবশ্যই আপনার প্রোগ্রামে একটি ফিল্টার সঞ্চালন করতে হবে)। এই অভিধানটিতে কিছু বড় শব্দ রয়েছে, সুতরাং সমস্ত শব্দকে ছোট হাতের মধ্যে রূপান্তর করুন।

একটি ইংরাজী ভাষার অভিধান ব্যবহার করে, এমন একটি সংখ্যার একটি তালিকা তৈরি করুন যা এলসিডি ক্যালকুলেটরটিতে টাইপ করা যায় এবং একটি শব্দ তৈরি করে। সমস্ত কোড গল্ফ প্রশ্নের মত, এই টাস্কটি সম্পন্ন করার সবচেয়ে সংক্ষিপ্ততম প্রোগ্রামটি জয়ী হয়।

আমার পরীক্ষার জন্য, আমি টাইপ করে জড়িত ইউএনআইএক্স ওয়ার্ডলিস্টটি ব্যবহার করেছি:

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

অথবা বিকল্পভাবে, এটি এখানে পাবেন

উদাহরণস্বরূপ, উপরের চিত্রটি 35007ক্যালকুলেটরে নম্বর টাইপ করে এবং এটিকে উল্টো দিকে তৈরি করে তৈরি করা হয়েছিল।

চিঠি এবং তাদের সম্পর্কিত নম্বর:

  • :8
  • :6
  • l :7
  • আমি :1
  • :0
  • গুলি :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

সিজেম, 44 42 বাইট

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

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কমান্ড লাইন থেকে প্রোগ্রামটি চালানোর জন্য, জাভা ইন্টারপ্রেটারটি ডাউনলোড করুন এবং সম্পাদন করুন:

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

আবার, গল্ফিং সহায়তার জন্য @ টবিস্পাইটকে ধন্যবাদ।

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
$ 

"বেলি" এবং "বেলিজ" শব্দ কি? আপনি যত বেশি জানেন ...
ক্লিমিক

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
পরীক্ষিত নয় তবে: ১) এর .findচেয়ে কম .index, ২) কোন সংস্করণটির উপর নির্ভর করে কমপক্ষে ২.7.১০ তে openএকটি মোড আর্গুমেন্ট ছাড়াই r, ৩) কেবলমাত্র for x in open(...)কাজ করে না ? (একটি .split('\n').splitlines()
ট্রেলিং

1
এছাড়াও g+=[['0.'+c[1:],c][c[0]!='0']]*c.isdigit(), এবং আপনি মধ্যে reversing দ্বারা আরো কয়েকটি সঞ্চয় করতে পারেন fতারপর করছেন for c in fপরিবর্তে থাকার c=x[::-1]। এছাড়াও আপনি কেবল fএকবার ব্যবহার করেন , সুতরাং আপনার এটিকে ভেরিয়েবল হিসাবে সংরক্ষণ করার দরকার নেই
Sp3000

6

জাভাস্ক্রিপ্ট (ES7), 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

আমি এটি ইউনিক্স ওয়ার্ডলিস্টে চালিয়েছি এবং ফলাফলগুলি একটি পেস্ট বিনে রেখেছি:

ফলাফল

ফায়ারফক্সে ফলাফল পেতে ব্যবহৃত কোড :

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

এর সাথে কি হয় t('Impossible')?
আর্টুরো টরেস সানচেজ

@ আর্টুরো টরেস সানচেজ আপনি ঠিক বলেছেন, আমি ঠিক করে
রেখেছি

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

জিএনইউ সেড, 82

(1 টি সহ -r)

গল্ফিং সহায়তার জন্য @ টবিস্পাইটকে ধন্যবাদ

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 দিয়ে শুরু হয়, অন্যথায় একই জায়গায় দুটি স্পেস প্রদর্শন করে)। উজ্জ্বল দিকে, এটি সঠিকভাবে "অটো" (উভয় 0s প্রদর্শন করে) এর মতো শব্দগুলি পরিচালনা করে কারণ এটি আসলে কোনও দশমিক সংখ্যা প্রদর্শন করে না!


এটি করার জন্য আমি আরও ভাল ভাষার কথা ভাবতে পারি না definitely অবশ্যই আরও বেশি গল্ফ করা যেতে পারে তবে আমি এখনই খুব ক্লান্ত। টিলড হ'ল প্রত্যাখ্যানের প্রতীক [ ( - )বোতাম]।

ইনপুটটি ক্যালকুলেটারের উত্তর ভেরিয়েবল থেকে নেওয়া হয়, যার অর্থ শেষ যা যা মূল্যায়ন করা হয়েছিল (যেমন _ইন্টারেক্টিভ পাইথন শেলের মতো) তাই আপনাকে হোমস্ক্রিনে একটি স্ট্রিং টাইপ করতে হবে (উদ্ধৃতি চিহ্নটি চালু আছে ALPHA+), টিপুন ENTERএবং তারপরে প্রোগ্রামটি চালান। বিকল্পভাবে, আপনি কমান্ড পৃথক করতে একটি কোলন ব্যবহার করতে পারেন, সুতরাং আপনি যদি প্রোগ্রামটির নাম রাখেন, "CALCTEXT" বলুন এবং আপনি এটি "HELLO" স্ট্রিংয়ে চালাতে চান, আপনি "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.' মিস করছি প্রয়োজন। আশা করি এখন ঠিকঠাক কাজ করে।

সম্পাদনা : ".রেডলাইনস ()" সরানো হয়েছে এবং এটি এখনও কাজ করে; পি

সম্পাদনা 2 : কিছু স্পেস সরানো হয়েছে এবং তৃতীয় লাইনে মুদ্রণ সরিয়ে ফেলুন

সম্পাদনা 3 : এসপি 3000-এর জন্য 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()যথেষ্ট।
manatwork

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 বাইট)

প্রাসঙ্গিক কোড (ফাইল ক্যালক্যাসে বলুন):

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);
}

এটি সর্বদা দশমিক যোগ করে এবং যখন অবৈধ "। তবে অন্যথায় এটি যেমন করা উচিত তেমন কাজ করে। : P: P

ধন্যবাদ @ লিজিওনম্যামাল978!


আপনি পরিবর্তন করে 7 বাইট সংরক্ষণ করতে পারবেন ;String l=করার ,l=এবং =o+করতে +=
LegionMammal978
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.