জাভাস্ক্রিপ্টে বর্ণমালা তৈরি করা


21

আমি নিশ্চিত যে এটি করার সর্বোত্তম উপায় আর নেই তবে ভেবেছি এটি জিজ্ঞাসা করতে ব্যথা করতে পারে না।

আমি টাইপ করে ক্লান্ত a='abcdefghijklmnopqrstuvwxyz'

শীতল ভাষার রয়েছে Range('a'..'z')বা অনুরূপ

যতটা সম্ভব সংক্ষিপ্ততর জেএসের সাথে আমরা কী নিয়ে আসতে পারি ??

for(i=97,a='';i<123;){a+=String.fromCharCode(i++)}

কেবল বর্ণমালার চেয়ে লম্বা - তবে গ্যারান্টি দেয় যে আমি কোথাও স্ক্রুও করব না।

আমি আশা করছি 50 টিরও কম অক্ষরে অ্যাজ উত্পাদন করার জন্য একটি বাজে বিট শিফটি উপায় রয়েছে।

আমি চারপাশে গোলযোগ i=97;Array(26).map(x=>String.fromChar....i++

তবে আমি যোগদানের পরে এটি ব্যবহারের জন্য অ্যারে (26) বিভক্ত করার পরে এটি সর্বদা দীর্ঘ ছিল


সম্পাদনা: আমি এটিকে নামিয়েছি

[...Array(26)].reduce(a=>a+String.fromCharCode(i++),'',i=97)

60 বাইট


11
@ মুডিফিশ, লুইস মেন্ডো: এটি প্রতি মেটা অন ​​টপিকের
ডোরকনবব

1
[...Array(26)].map((q,w)=>String.fromCharCode(w+97))52 বাইট যোগ জন্য আরেকটি 7.join``
andlrc


@ দেব-নাল এ = ''; আই = ;৯; [... অ্যারে (২))] map 7 সালে ফলাফল কমা না পেয়ে?
চার্লি ওয়েন

1
@ চর্লিওয়াইন[...Array(26)].map((q,w)=>String.fromCharCode(w+97)).join``
andlrc

উত্তর:


12

স্ট্রিং.ফ্রোমচারকোডের বিকল্প

... আপনি যদি কেবল ছোট বর্ণমালায় খুশি হন।

for(i=9,a='';++i<36;)a+=i.toString(36) // 38, cannot be used in an expression
[...Array(26)].map(_=>(++i).toString(36),i=9).join`` // 52 directly returnig the string desired
[...Array(26)].map(_=>a+=(++i).toString(36),a='',i=9) // 53 assign to a variable
(i=9,[for(_ of Array(26))(++i).toString(36)].join``) // 52 ES7 direct return
i=9,a='',[for(_ of Array(26))a+=(++i).toString(36)] // 51 ES7 assign to a variable

1
ওহ ডাং, যে চালাক। সুতরাং এটি 10 ​​দিয়ে শুরু হচ্ছে, বেস ৩ to এ রূপান্তর করে এটি মুদ্রণ করবে? তাই আজ!
চার্লি ওয়েন

ম্যাপ ফাংশন কলগুলির জন্য এগুলি কি = '' এবং i = 9 টি আর্গুমেন্ট? এমডিএন-তে অ্যারে.প্রোটোটাইপ.ম্যাপ () টি চেক করা হয়েছে এবং এটি মানচিত্রের পক্ষে এ জাতীয় যুক্তি সমর্থন করে না বলে মনে হচ্ছে ..
জে সোমডন

@ জায়েসমেডন এগুলি মানচিত্রের ফাংশন কলের পক্ষে যুক্তিযুক্ত, একভাবে জাভাস্ক্রিপ্ট ফাংশন টিপিকভাবে যত্ন করে না এবং প্যারামিটারগুলি প্রত্যাশা করে না তা ত্যাগ করে। সুতরাং আমি আমার প্রয়োজনীয় একটি ভেরিয়েবল শুরু করি, যখন একটি প্যারামিটার যুক্ত করা হয় যা ডাকা ফাংশনটির জন্য কোনও কাজের নয়
edc65

@ জায়েসোমডন এই উত্তর এবং সম্পর্কিত মন্তব্যগুলি দেখুন কোডগল্ফ.স্ট্যাকেক্সেক্সঞ্জ.com
a

@ এডসি 65 আহা দেখছি! যে ঝরঝরে! সুতরাং এখানে, যখন জাভাস্ক্রিপ্ট ম্যাপে i = 9 এর মতো আর্গুমেন্টগুলি মূল্যায়ন করে (), এটি আসলে একটি বিশ্বব্যাপী পরিবর্তনশীল তৈরি করে আমি তারপরে 9 সেট করে?
জে সোমডন

11

দ্রষ্টব্য: এই সমস্ত কৌশলগুলি বর্ণমালার স্ট্রিংকে ভেরিয়েবলের জন্য বরাদ্দ করে a


আমি 99% নিশ্চিত যে জাভাস্ক্রিপ্টে এটি অর্জনের সবচেয়ে সংক্ষিপ্ততম উপায়টি সত্যই:

a="abcdefghijklmnopqrstuvwxyz" // 30 bytes

তবে আরও বেশ কয়েকটি আকর্ষণীয় পদ্ধতি রয়েছে। আপনি স্ট্রিং সংক্ষেপণ ব্যবহার করতে পারেন:

a=btoa`i·?yø!?9%?z)ª»-ºü1`+'yz' // 31 bytes; each ? represents an unprintable

আপনি সংক্ষেপিত স্ট্রিংটি পেতে পারেন atob`abcdefghijklmnopqrstuvwx`'yz'ম্যানুয়ালি যোগ করা হবে কারণ যদি আপনি পুরো স্ট্রিং কম্প্রেস, যখন ফলাফলের শুধুমাত্র 27 বাইট, এটা হিসেবে চালু হবে abcdefghijklmnopqrstuvwxyw==

আমি বিশ্বাস করি যে এটির প্রোগ্রামটিমেটিক্যালি করার সবচেয়ে সংক্ষিপ্ততম উপায়টি আপনার প্রস্তাবিত পদ্ধতিও:

for(i=97,a='';i<123;)a+=String.fromCharCode(i++) // 48 bytes

আপনি যদি এটি চান তবে ইএস 6 বৈশিষ্ট্যগুলি ( টেম্পলেট স্ট্রিং`` , স্প্রেড অপারেটর... ) দিয়ে এটি করতে পারেন:

a=[...Array(26)].map(_=>String.fromCharCode(i++),i=97).join`` // 61 bytes
a=[...Array(26)].map((_,i)=>String.fromCharCode(i+97)).join`` // also 61 bytes
a=[...Array(i=26)].map(_=>String.fromCharCode(++i+70)).join`` // again, 61 bytes

পরিবর্তে ভেরিয়েবলের মাধ্যমে আপনি আরও একটি ভাল করতে পারেন .join``:

[...Array(26)].map(_=>a+=String.fromCharCode(i++),i=97,a='') // all 60 bytes
[...Array(26)].map((_,i)=>a+=String.fromCharCode(i+97),a='')
[...Array(i=26)].map(_=>a+=String.fromCharCode(++i+70),a='')

বা অ্যারে বোঝাপড়া সহ ES7 , যা অন্য একটি বাইট সংক্ষিপ্ত:

a=[for(_ of Array(i=26))String.fromCharCode(++i+70)].join`` // 59 bytes

ভেরিয়েবলটি আগে তৈরি করা অন্য একটি বাইট সংরক্ষণ করে:

a='',[for(_ of Array(i=26))a+=String.fromCharCode(++i+70)] // 58 bytes

এছাড়াও, String.fromCharCodeএকাধিক যুক্তি গ্রহণ করে এবং স্বয়ংক্রিয়ভাবে সেগুলিতে যোগদান করবে। সুতরাং আমরা প্রতিটি ES6 সংস্করণ 57 বাইটে গল্ফ করতে পারি:

a=String.fromCharCode(...[...Array(26)].map(_=>i++,i=97)) // all 57 bytes
a=String.fromCharCode(...[...Array(26)].map((_,i)=>i+97))
a=String.fromCharCode(...[...Array(i=26)].map(_=>++i+70))

এবং ES7 এক 55 এর নিচে:

a=String.fromCharCode(...[for(_ of Array(i=26))++i+70]) // 55 bytes

আপনি যদি গল্ফিং রেঞ্জগুলি সম্পর্কে আরও জানতে চান তবে এই টিপসের সেটটি দেখুনES7 এর অ্যারে বোধগম্যতা সম্পর্কে একটি রয়েছে ।

সম্পাদনা: এডসি 65 যেমন উল্লেখ করেছে, এর বেশিরভাগগুলি এর i.toString(36)পরিবর্তে ছোট হয়ে যায় String.fromCharCode(i):

for(i=9,a='';++i<36;)a+=i.toString(36) // 38 bytes
a=[...Array(26)].map(_=>(++i).toString(36),i=9).join`` // 54 bytes
[...Array(26)].map(_=>a+=(++i).toString(36),i=9,a='') // 53 bytes
i=9,a=[for(_ of Array(26))(++i).toString(36)].join`` // 52 bytes
i=9,a='',[for(_ of Array(26))a+=(++i).toString(36)] // 51 bytes

আমি বিশ্বাস করি যে এটিই সবচেয়ে সংক্ষিপ্ততম যাকে ফাংশন রিটার্ন মান হিসাবে ডাকা যেতে পারে:

eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 46 bytes

এটি কোনও ফাংশন থেকে ম্যানুয়ালি ফেরত দেওয়ার চেয়ে এটি তিনটি বাইট সংক্ষিপ্ত:

x=>eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 49 bytes
x=>{for(i=9,a='';++i<36;)a+=i.toString(36);return a} // 52 bytes

অবশ্যই, x=>"abcdefghijklmnopqrstuvwxyz"এখনও সব কিছু প্রহার করে।


আমি কোথায় যাচ্ছি তা সত্যিই পছন্দ করি - কেবল ইচ্ছে করে আমি ক্রোমে ES7 করতে পারি :(
চার্লি উইন

2
@ চর্লিউইন হ্যাঁ, এটি একটি লজ্জার বিষয় যে সমস্ত ব্রাউজারগুলি সর্বশেষতম বৈশিষ্ট্যগুলিকে সমর্থন করে না। তবে সর্বোপরি, ক্রোম কোনও দিনে তৈরি হয় নি ...;)
ETH প্রোডাকশনগুলি

এই সমাধানগুলির বেশিরভাগটি স্ট্রিংয়ের পরিবর্তে .to স্ট্রিং ব্যবহার করে সংক্ষিপ্ত করা যায়। আমার উত্তর দেখুন
edc65

1
@ চর্লিউইন আমি মনে করি ক্রোম বিটা এখন মডিউল এবং লেজ কল অপ্টিমাইজেশন ব্যতীত সমস্ত ES7 এবং সমস্ত ES6 সমর্থন করে।
gcampbell

এখানে একটি 42-বাইটার যা ফাংশন রিটার্ন মান হিসাবে ডাকা যেতে পারে: (f=(i=9)=>++i<36?i.toString(36)+f(i):'')()
রিক হিচকক

7

এখানে আরেকটি পদ্ধতি, একটি 51 বাইট ইএস 6 এক্সপ্রেশন:

String.fromCharCode(...Array(123).keys()).slice(97)

অবশ্যই উপরের ক্ষেত্রে 50 বাইট।


উপরের ক্ষেত্রে: স্ট্রিং.ফর্মচোড়ো (... অ্যারে (91) .কিজ ()) স্লাইস (65)
jpoppe

1

36 বাইট, একটি কৌশল ব্যবহার করে আমি সবে শিখেছি (এই পোস্টটি থেকে: /codegolf//a/176496/64538 ):

for(i=9;++i<36;)name+=i.toString(36)

window.name ডিফল্টরূপে একটি খালি স্ট্রিং।

অবশ্যই এটি 38-বাইট সমাধানের চেয়ে কম ব্যবহারিক কারণ এটি একটি দীর্ঘ পরিবর্তনশীল নাম ব্যবহার করে।


1

বিশ্বব্যাপী সুযোগে সংজ্ঞায়িত বা না-কি হতে পারে তা ব্যবহার করে

অ্যারে ম্যাচিংয়ের জন্য অবজেক্ট বৈশিষ্ট্যের জন্য 39 বাইট a-z

a=`${Object.keys(top)}`.match(/[a-z]/g)

একটি বাছাই করা জন্য 48 বাইট Set

a=new Set(`${Object.keys(top)}`.match(/[a-z]/g))

বাছাই করা 55 বাইট Set

a=new Set(`${Object.keys(top)}`.match(/[a-z]/g).sort())

বাছাই করা স্ট্রিংয়ের জন্য 67 বাইট

a=[...new Set(`${Object.keys(top)}`.match(/[a-z]/g).sort())].join``
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.