मुझे कुछ उपयुक्त लाइसेंस प्लेट उत्पन्न करें!


15

परिदृश्य: आप एक सॉफ्टवेयर डिज़ाइनर हैं जो एक gov't-run कंपनी के लिए काम कर रहे हैं जो कारों और अन्य वाहनों के लिए लाइसेंस प्लेट डिजाइन करती है। आपको सॉफ़्टवेयर विकसित करने के लिए कहा गया है जो लाइसेंस प्लेट उत्पन्न करता है। इससे पहले कि आप काम करने लगें, आपके मालिकों ने इन जमीनी नियमों को निर्धारित किया।


एक लाइसेंस प्लेट में नहीं हो सकता:

  • ASS
  • 666
  • 69<any number here>
  • <any number here>69
  • KKK
  • SHT

नियम और आवश्यकताएं:

  • लाइसेंस प्लेट को बेतरतीब ढंग से उत्पन्न किया जाना चाहिए।
  • एक बार एक यादृच्छिक लाइसेंस प्लेट उत्पन्न हो जाने पर, उसी लाइसेंस प्लेट को फिर से उत्पन्न नहीं किया जा सकता है।
  • आपको कम से कम 200 अद्वितीय लाइसेंस प्लेटों का उत्पादन करना होगा । आप चाहें तो अधिक उत्पन्न कर सकते हैं
  • आप उन्हें "याद" करने के लिए फ़ाइल में उत्पन्न प्लेटों को स्टोर कर सकते हैं।
  • लाइसेंस प्लेट में 2 खंड होते हैं, जिसमें केवल तीन अक्षर होते हैं, और एक केवल तीन संख्याओं से युक्त होता है, जैसे डैश द्वारा अलग: 233-ADFयाADF-233
  • आप केवल संख्याओं और बड़े अक्षरों का उपयोग कर सकते हैं।
  • लाइसेंस प्लेटों को stdout, या फ़ाइल में लिखा जा सकता है।
  • लाइसेंस प्लेट के प्रत्येक "पक्ष" में तीन नंबर या अक्षर होंगे।
  • यह एक , इसलिए सबसे कम, सबसे लोकप्रिय, उत्तर जीतता है। विजेता को सात दिनों के बाद चुना जाएगा।

सामान्य नियम

  • उत्तर में शामिल होना चाहिए , लेकिन निम्नलिखित तक सीमित नहीं है।
  • भाषा का नाम।
  • अक्षर गणना।
  • फाइल का आकार।
  • कोड कैसे चलाया जाता है।
  • कोड ही।
  • उदाहरण: पायथन 234 चार्ट या पायथन 23mb

यदि मुझे कोई अतिरिक्त विवरण स्पष्ट करने की आवश्यकता है, तो कृपया टिप्पणियों में इसका उल्लेख करें और मैं इसे अपनी पोस्ट में जोड़ दूंगा। वैसे भी, सौभाग्य, और मुझे कुछ उपयुक्त लाइसेंस प्लेट उत्पन्न!


अपडेट 1: विजेता को थोड़ा पहले चुना जाएगा।

यह पता चलता है कि मुझे जल्द ही एक यात्रा पर जाना है, इसलिए मैं 25:00 जुलाई, 00 बजे के आसपास एक विजेता चुनूंगा। विजेता चुने जाने के बाद, आप अभी भी एंट्री जमा कर सकते हैं, बस यह जान लें कि एक विजेता चुना गया है। बाई।


अपडेट 2: विजेता!

हमारे पास विजेता हैं! वाह! हर किसी ने भाग लिया जो पनीर और शराब! यहां कौन जीता है।

  • 1 स्थान: --ngel - बैश (95 अक्षर)
  • दूसरा स्थान: मार्टिन ब्यूटनर - गणितज्ञ (182 बाइट्स)
  • दूसरा स्थान: एमिलियो एम बुमाचार - पायग (92?)
  • दूसरा स्थान: पीटर टेलर - गोल्फस्क्रिप्ट (98 अक्षर)
  • तीसरा स्थान: मार्क थॉमस - रूबी (127 पात्र)

वाह, तीन दूसरी जगह संबंध। वाह। प्रतियोगिता समाप्त हो गई है, लेकिन यदि आप चाहते हैं तो प्रविष्टियां देने के लिए स्वतंत्र महसूस करें। बाई!



2
" एक बार जब एक यादृच्छिक लाइसेंस प्लेट उत्पन्न होती है, तो एक ही लाइसेंस प्लेट फिर से उत्पन्न नहीं की जा सकती है। " गैर-यादृच्छिक लाइसेंस प्लेटों के बारे में क्या?
पीटर टेलर

4
ऐसा करने का स्पष्ट तरीका (और शायद वास्तविक जीवन में काम करने का तरीका) संख्याओं को क्रम में उत्पन्न करना है।
पीटर टेलर

5
"बेतरतीब ढंग से उत्पन्न" अभेद्य है। मुझे लगता है कि आप का अर्थ है "अप्रयुक्त कानूनी लाइसेंस प्लेटों से समान रूप से यादृच्छिक पर चयनित", कहने के बजाय, समान रूप से कानूनी लाइसेंस प्लेटों की शुरुआत से यादृच्छिक पर चयनितAAA-
पीटर टेलर

1
कृपया बताएं कि प्रत्येक प्लेट में कितने अंक होने चाहिए, और कौन से वर्ण मान्य हैं - यह देश
गर्वित हैकेलर

13
अब मैं कुछ हद तक यादृच्छिक लाइसेंस प्लेट बनाने के लिए एक कार्यक्रम लिखने के लिए लुभा रहा हूं जिसमें आपकी सूची में कुछ अश्लील या अन्यथा अनुचित स्ट्रिंग शामिल नहीं हैं।
इल्मरी करोनन

जवाबों:


12

बैश (95 वर्ण)

स्क्रिप्ट को mअपने PATH में एक फ़ोल्डर के रूप में सहेजें, जिसमें बिट सेट निष्पादित हो।

के रूप में चलाएँ bash m। प्लेटें फ़ाइल पी में संग्रहीत की जाती हैं

l(){ tr -dc $1</dev/urandom|head -c3;};egrep -ve"ASS|666|69|KKK|SHT" -fp>>p<<<`l 0-9`-`l A-Z`;m

यह निम्नलिखित को चलाने के बराबर है:

# Print three random numbers and three random letters
echo $(tr -dc 0-9 < /dev/urandom | head -c3)-$(tr -dc A-Z < /dev/urandom | head -c3) |

# Print only plates not matching the blacklist or any line of p
# Append the plates ton p
egrep -v -e "ASS|666|69|KKK|SHT" -f p >> p

# Execute itself again
m 

कैविएट: फाइनल mवास्तव में होना चाहिएexec m से पूर्ण होने की प्रतीक्षा कर रही प्रक्रियाओं को छोड़ने से बचने के लिए (+5 चार्ट) (लेकिन आपके पास बहुत से हजारों हो सकते हैं)

उपयोग करने के विचार के लिए श्रेय http://www.cyberciti.biz/faq/linux-random-password-generator/ को जाता है tr -dc


क्या यह मेरे लिए है या विशिष्टता की आवश्यकता गायब है?
क्रिस्टियन सियुपिटु

1
@ क्रिस्टियन-स्यूपिटु: grep -vहम ब्लैकलिस्ट और हमारे द्वारा पहले से ही उत्पन्न प्लेटों की सूची को छोड़कर ( grepपी प्रति लाइन एक पैटर्न शामिल करने की उम्मीद कर रहे हैं , लेकिन प्लेटों में नियमित अभिव्यक्ति मेटाचैकर शामिल नहीं है, वे केवल खुद से मेल खाते हैं)। हम केवल प्रति पुनरावृत्ति में एक या शून्य प्लेटें उत्पन्न करते हैं, इसलिए प्रत्येक पुनरावृत्ति के बाद प्लेटों को बाहर करने की पूर्ण (अद्यतन) सूची को grep द्वारा पढ़ा जाएगा। : D
Dngel

6

PYG - 92

Pe(Se(Re.sub(".*(666|69|ASS|KKK|SHT).*","",J(RSm(STuc*3,3)+[j]+RSm(STd*3,3)))for j in'-'*K))

अब सभी अप्रयुक्त प्लेटों में समान रूप से चयन करने में सक्षम, ओपी के चश्मे को रखते हुए, 1 और चरित्र से छोटा होने पर।

यह सैद्धांतिक रूप से संभव है कि 999 प्लेटों की सूची में पर्याप्त पुनरावृत्तियां होंगी ताकि छंटनी सेट 200 से कम हो। लेकिन इसके बारे में संभावनाएं बहुत कम हैं। दस परीक्षणों में, मुझे सबसे कम लंबाई 994 मिली।

EDIT: बिटपवैन की सलाह पर दो चार्ट को बचाने के लिए 999 को K (जो कि 1000 के लिए pyg है) को बदल दिया।


1
क्या आपने अस्वीकृत मानों को फ़िल्टर किया है? कहीं भी कोई केआरके या 666 न देखें।
vectorized

5
@bitpwner: मैं 0 से 5 तक केवल अंकों का उपयोग करता हूं और A से J के अक्षरों का उपयोग करता हूं, इसलिए अस्वीकृत मान नहीं हो सकता।
एमिलियो एम बुमाचार

बहुत चालाक! किसी ने कभी नहीं कहा कि दूसरों को इस्तेमाल किया जाना था। अच्छा लगा।
केजेल श्मिट

1
ओपी बेतरतीब ढंग से "अप्रयुक्त कानूनी लाइसेंस प्लेटों से यादृच्छिक रूप से चयनित" होने के लिए सहमत हुआ। प्रश्न में टिप्पणी देखें। जब तक आपकी वर्दी की परिभाषा का अर्थ किसी भी सीमा से एक समान नहीं है। और आप 999 को K में बदल सकते हैं, जिससे u 2 चार्ट की बचत होगी।
वेक्टर

3
यकीन नहीं है कि मैं आउटपुट को रैंडम के रूप में
गिनूंगा

5

गणितज्ञ, 182 बाइट्स

ऊ, यह लंबा है

l={};While[Length[l=Union@Pick[l,StringFreeQ[l,"ASS"|"666"|"69"|"KKK"|"SHT"]]]<200,AppendTo[l,RandomSample[FromCharacterCode/@{48+9~(r=RandomInteger)~3,65+25~r~3}]~Riffle~"-"<>""]];l

Ungolfed

l = {};
While[
  Length[
    l = Union@
      Pick[l, StringFreeQ[l, "ASS" | "666" | "69" | "KKK" | "SHT"]]
  ] < 200,
  AppendTo[l, 
   RandomSample[
      FromCharacterCode /@ {48 + 9~(r = RandomInteger)~3, 
        65 + 25~r~3}]~Riffle~"-" <> ""]
  ];
l

बहुत सीधा। यादृच्छिक प्लेट्स उत्पन्न करता है, और डुप्लिकेट को बाहर निकालता है और 200 तक पाए जाने पर मना किया जाता है।


5

GolfScript (98 वर्ण)

260{3?}:^~,{.10^+`-3>'-'+\10^/26^+26base(;{65+}%+.-1%}%{'ASSKKKSHT66669'3/{1$\?)!},*},{,^^rand}$n*

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


4

जावास्क्रिप्ट (ईएस 6) - 213

इसे शायद सुधारा जा सकता है। फ़ायरफ़ॉक्स कंसोल पर परीक्षण किया गया।

console.log()यदि आप परीक्षण करना चाहते हैं तो उस चेतावनी को बदलें

r=x=>~~(Math.random()*x)+'';l=x=>[...'ABCDEFGHIJKLMNOPQRSTUVWXYZ'][r(26)];a=[];while(a.length<200)p=r(10)+r(10)+r(10)+'-'+l()+l()+l(),!/ASS|666|69|KKK|SHT/.test(p)&&a.indexOf(p)<0&&a.push(p);a.forEach(x=>alert(x))

वाह, यह कोड की सबसे लंबी एकल पंक्ति है जो मैंने कभी देखा है।
DatEpicCoderGuyWhoPrograms

2
@DatEpicCoderGuyWhoPrograms आपने स्पष्ट रूप से मेरी 400+ चार सिंगल-लाइन JS regex;) को नहीं देखा है;
एरिक लैगरग्रेन

@eric_lagergren ऐसा लगता है कि यह लिखने के लिए एक दर्द होता ...
DatEpicCoderGuyWhoPrograms

3
@DatEpicCoderGuyWhoPrograms आप इसे कई लाइनों पर लिख सकते हैं और फिर अनावश्यक व्हाट्सएप को हटा सकते हैं। कई ऑनलाइन सेवाएँ हैं जो js फ़ाइल के आकार को कम करने और बाद में बैंडविड्थ को बचाने के लिए उस + अन्य शॉर्टनिंग (फ़ंक्शन / var आदि नामों की जगह) की पेशकश करती हैं।
SBoss

1
@DatEpicCoderGuyWhoPrograms बाद में अनुकूलित करें। मैं यह पता
लगाता

4

रूबी - 136 133 129 वर्ण

घृणित। हालांकि, इसमें सुधार की गुंजाइश है। बस में कोड ड्रॉप irbया pryचलाने के लिए दर्ज हिट:

f=->*t{[0,1,2].map{t.sample}*''}
g=->l{(a=f[*?A..?Z]+?-+f[*?0..?9];l|=[a]if/69|666|ASS|SHT|KKK/!~a)until l.size>199;l}
puts g[[]]

4

रूबी, 127 वर्ण

"पठनीय" रूबी संस्करण में मेरा प्रयास:

a=[]
until a.size==200 do
  p="#{rand(899)+100}-#{('A'..'Z').to_a.sample(3).join}"
  a<<p unless p=~/69|666|ASS|SHT|KKK/
end
puts a

ध्यान दें कि यह आज्ञाकारी लाइसेंस प्लेट उत्पन्न करता है , लेकिन संभव प्लेटों के पूरे सेट को उत्पन्न नहीं करेगा (इन उत्तरों में से अधिकांश के साथ)। यह एक आवश्यकता नहीं लगती है।
मार्क

4

पायथन 2.7 - 258 चर

मैं एक पेशेवर प्रोग्रामर या कुछ भी नहीं हूं, इसलिए मैं कहूंगा कि मैं परिणाम से संतुष्ट हूं।

import random as o
r=o.randint
t,j,k=[],0,""
b=["SHT","KKK","ASS","69","666"]
for i in range(200):
 l,j=b[0],b[4]
 while any(w in l for w in b):
  l,j="",""
  for i in range(3):
   l+=chr(r(65,90))
   j+=str(r(0,9))
 t.append(l+'-'+j)
print "\n".join(set(t))

Filesize 4.0 K है, साथ चलाएं python file.py!


ऐसा नहीं है कि चाहिए passएक हो continue? आप भी 4. 4 के बजाय 1 स्थान के साथ इंडेंट करके कुछ
चार्ट को

के साथ भी for i in range(0,200):बदला जा सकता है for i in range(200):
क्रिस्टियन सियुपिटु

@CristianCiupitu का उपयोग करते समय मैं इसे पूरा करने के लिए 200 नहीं कर सका continue.. लेकिन passचाल चली । साथ ही, यह छोटा है। और जब मैंने कोशिश की for i in range(200), तो यह केवल 199 ^ ^ मैंने उन्हें बाद में एक duplicatesचर बनाकर गिना और duplicates += 1पहले डाल दिया passऔर -सूची / स्ट्रिंग में होने वाली घटनाओं की गिनती की ।
एडम

@CristianCiupitu रेंज (200) ने सभी के बाद काम किया - कोड ब्लॉक में 4 स्थान वास्तव में हैं \tऔर उन्हें 1 स्थान से बदलने से वर्ण गणना में परिवर्तन नहीं हुआ ... सुझाव के लिए धन्यवाद!
एडम

1
एक उपयोगकर्ता ने सुझाए गए संपादन में केवल हटाने के लिए सुझाव दिया if k in t: pass, क्योंकि यह कुछ नहीं करता है।
दरवाज़े

3

अजगर - 208

हाय लाइसेंस प्लेट उत्पादन में मेरा छुरा। यह समाधान @ bitpwner के समाधान के समान है, लेकिन स्ट्रिंग मॉड्यूल के बिना और लाइसेंस प्लेट के लिए एक सूची के बजाय मैंने एक सेट का उपयोग करने के लिए चुना और इसकी संख्या पहले की अनुमति देता है।

import random as r,re
f=r.randint
l=lambda x:chr(f(65, 90))if x else`f(0,9)`
d=set()
while len(d)<200:
 k=f(0,1);j=1-k;c=l(k)+l(k)+l(k)+'-'+l(j)+l(j)+l(j)
 if not(re.search("666|69|ASS|KKK|SHT",c)):d.add(c)

नमूना उत्पादन:

set(['DQJ-641', '086-QRY', '981-GAZ', 'UHN-718', '114-VMI', 'GLO-887',  ...

3

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

यहाँ मेरा योगदान है। मैं इससे प्रभावित हूं, लेकिन मुझे पता है कि दूसरों ने अजगर के साथ बेहतर किया है।

from random import randint as r
f=()
while len(f)<200:
 t=str(r(0,999))
 if not("666" in t or "69" in t):
  u=''.join(chr(r(65,90)) for _ in [1,2,3])
  if not("KKK" in u or "SHT" in u or "ASS" in u):f+=("%s-%s"%(t.zfill(3),u),)
 f=tuple(set(f))
print f

2

अजगर - 165

वे आयात ...

import random as r,re
j="666|69|ASS|KKK|SHT"
t=r.randint
while len(j)<2e3:
 exec"x="+"chr(t(0,25)+65)+"*3+"'-'"+"+`t(0,9)`"*3
 if not re.search(j,x):print x;j+='|'+x

यदि संख्या या अक्षर के साथ यादृच्छिक रूप से शुरू करने की आवश्यकता है, जो मुझे नहीं लगता कि वास्तव में आवश्यक है, तो 190।

import random as r,re
j="666|69|ASS|KKK|SHT"
t=r.randint
while len(j)<2e3:
 exec"x="+"chr(t(0,25)+65)+"*3+"'-'"+"+`t(0,9)`"*3
 x=x[::r.choice((-1,1))]
 if not re.search(j,x):print x;j+='|'+x

चार्ट या बाइट्स?
DatEpicCoderGuyWhoPrograms

क्या मुझे PYG का सुझाव देना चाहिए? gist.github.com/Synthetica9/9796173
एमिलियो एम बुमाचार

मैं 208 वर्णों की गणना करता हूं, और क्या आपका समाधान पहले संख्याओं की अनुमति देता है?
विलेम

@ विलेम इंडेंटेशन के लिए चार स्थान वास्तव में टैब हैं, और केवल पहले अक्षर हैं।
वेक्टर

2

PHP 341 324 320

सबसे अच्छा मैं कर सकता था।

<?$a="p";$b=fopen($a,'a+');while($c<200){$d=rand(100,999);$e='';for($f=0;$f<3;++$f)$e.=chr(rand(65,90));$g=(rand(1,2)==1)?"$d-$e":"$e-$d";$h=array('ASS','666','69','kkk','SHT');$i=1;foreach($h as $j)!preg_match("/$j/",$g)?:++$i;if($i==1){$k=fread($b,filesize($a));if(!strpos($k,$g)){fwrite($b,$g);echo"$g<br />";++$c;}}}

कोड को चलाने के लिए बस एक .php फ़ाइल के रूप में सहेजें और इसे किसी भी वेब सर्वर पर ब्राउज़ करें। यदि यह पहले से मौजूद नहीं है, तो यह ब्लैकलिस्ट फ़ाइल p.txt बनाने का प्रयास करेगा। हालाँकि रूट एक्सेस नहीं होने पर आपको इसे पूर्ण सर्वर पथ के साथ परिभाषित करने की आवश्यकता हो सकती है।

कोड ही यहाँ पूर्व गोल्फ है:

<?
// create random plate
// check it does not break rules
// check is not on all time blacklist file
// Add to blacklist file
// Output to screen

// open file handle
$file = "p"; // filename and path if not root access
$fh = fopen($file, 'a+');

// do 200
while($x<200) {

    // get random number
    $rand_number = rand(100,999);

    // get random letters
    $letters = '';
    for($y=0; $y<3; ++$y) $letters .= chr(rand(65,90));


    // mix up combination
    $string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";

    // assume is ok
    $ok = 1;

    // Set checks to be excluded on new plates.
    $checks = array('ASS','666','69','kkk','SHT');

    // do the exclusions
    foreach ($checks as $check) !preg_match("/$check/", $string) ? : ++$ok;


    // if all ok, check is not on the blacklist
    if($ok == 1) {

        // read blacklist
        $blacklist = fread($fh, filesize($file));

        // if not on blacklist, add it to file, echo it to output, increment counter
        if (!strpos($blacklist, $string)) {
            fwrite($fh, $string);
            echo "$string<br />";
            ++$x;
        }
    }
}

मैं इसे प्राप्त कर सकता था जितना छोटा था :-(

नमूना आउटपुट

XWU-888
PUD-534
355-QXG
WDE-402
113-QID
362-YBW
TBK-594
939-XDT
148-ARZ
838-ICY
723-ZDA
.... does exactly 200 new plates.

संपादित करें: यदि संक्षिप्त रूप का उपयोग करने के लिए कुछ जोड़े पर ध्यान दिया जाए।


यदि प्लेटों को $string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
मिलाना

1
आप एकल-वर्ण फ़ाइल नाम (जैसे, p.txt के बजाय p) का उपयोग कर सकते हैं और अपने आप को 4 वर्ण भी सहेज सकते हैं।
मार्क

@ मकार मुझे नहीं पता था कि आप ऐसा कर सकते हैं। यह परीक्षण किया और यह ठीक काम किया। फ़ाइल एक्सटेंशन पर पढ़ें और वे उस तरह से काम नहीं करते हैं जैसा मैंने सोचा था कि उन्होंने किया था। धन्यवाद, यह बहुत दिलचस्प था।
पॉल ड्रूइट

1

डेल्फी, 161 बाइट्स

यहाँ मेरा इस पर ले रहा है। यह उनके बीच लाइन फीड के बिना स्टडआउट करने के लिए लाइसेंस प्लेट को आउटपुट करता है। यदि LF की जरूरत है (नियमों में निर्दिष्ट नहीं), तो अतिरिक्त 4 बाइट्स जोड़ता है।

गोल्फ संस्करण:

var S,L:string;begin repeat Str(100+Random(69),S);S:=S+'-';while Length(S)<7do S:=S+Chr(65+Random(10));if Pos(S,L)=0then L:=L+S;until Length(L)>1393;Write(L)end.

Ungolfed:

var
  S, L: string;
begin
  repeat
    Str(100 + Random(69), S); // generate and add first three numbers
    S := S + '-'; // add dash
    while Length(S) < 7 do // generate and add last three letters
      S := S + Chr(65 + Random(10));
    if Pos(S, L) = 0 then // check if its not in the L string and add it
      L := L + S;
  until Length(L) > 1393; // exit loop once L string has more than 1393 chars (199 * 7 = 1393)
  Write(L); // output L to stdout
end.

कैसे चलाएं:

app.exe > plates.txt

1

PHP, 267

यह लगभग उतना ही है जितना मुझे मिल सकता है।

<?php $g=file("p",2)?:[];$b=["ASS","666","KKK","SHT"];for($i=0;$i<200;){$m="A";$n=rand(702,18277);for($j=0;$j<$n;$j++){$m++;}$m.=-rand(100,999);if(!(strpos($m,"69")|in_array($m,$b)|in_array($m,$g))){$g[]=$m;echo"$m\n";$i++;}}file_put_contents("p",implode("\n",$g));?>

प्लेट्स "पी" फ़ाइल में संग्रहीत की जाती हैं।

<?php
$g=file("p",2)?:[]; // Read existing plates
$b=["ASS","666","KKK","SHT"]; // Don't generate these
for($i=0;$i<200;){ // 200 plates
    $m="A"; // Base letter
    $n=rand(702,18277); // 3 random letters
    for($j=0;$j<$n;$j++){$m++;} // Increment until letters are reached (SLOW, but short)
    $m.=-rand(100,999); // Add a dash and three numbers
    if(!(strpos($m,"69")|in_array($m,$b)|in_array($m,$g))){ // Check that it's valid and unused
        $g[]=$m;echo"$m\n";$i++; // Echo it, add it to used array and increment counter
    }
}
file_put_contents("p",implode("\n",$g)); // Save the plates
?>

1

आर, 229 वर्ण

मुझे यकीन है कि इसमें सुधार किया जा सकता है:

l=function(x)paste0(sample(x,3,r=T),collapse="")
a=function()c(l(LETTERS),l(0:9))
A=list()
for(i in 1:200)while(any(sapply(c("ASS","666","69","KKK","SHT"),grepl,A[[i]]<-a()))|A[i]%in%A[-i])A[[i]]=a()
lapply(A,paste,collapse="-")

कंसोल में चलाएं, लाइसेंस प्लेटों की एक सूची प्रिंट करता है।


1

कोबरा - 198

class P
    def main
        l,r=[],Random()
        while l.count<200
            a,b=r.next(1000),''
            for i in 3,b+='[r.next(65,91)to char]'
            if not ('69'in'[a]'or 666==a or b in'ASS KKK SHT'),l+=['[a]-'+b]
        print l

1

ECMAScript 6 - 155 168 158

चेतावनी : 200 चेतावनी संवाद (परिवर्तन alertकरने के लिए console.logपरीक्षण करने के लिए)

for(i=0,s={},r=Math.random,l=x=>String.fromCharCode(65+r()*26);i<200;)/ASS|666|69|KKK|SHT/.test(p=(r()+'-'+l()+l()+l()).slice(-7))?0:s[p]=s[p]||(alert(p),i++)

संपादित करें : उफ़। मूल संस्करण डुप्लिकेट मुद्रित ...

संपादित करें 2 : अब मूल स्कोर के करीब - सेट से एक साहचर्य सरणी में कुछ नकली डुप्लिकेट चेक के साथ स्विच किया जाता है ताकि वह इसे प्रिंट कर सके।

फ़ायरफ़ॉक्स कंसोल में परीक्षण किया गया।


मेरे समाधान में सुधार के लिए बधाई
विलियम बारबोसा

मैं "सिंटैक्स त्रुटि" प्राप्त कर रहा हूं l=x=>String.fromCharCode(65+r()*26);:। मुझे लगता है कि मैं नहीं जानता कि क्या हो रहा है के साथl=x=>...
केविन Fegan

@KevinFegan - मैं अनुमान लगा रहा हूँ कि आप फ़ायरफ़ॉक्स का उपयोग नहीं कर रहे हैं ... f=a=>bएक ES6 सुविधा है जो मूल रूप से शॉर्टहैंड के लिए है function f(a) { b }और यह फ़िलहाल फ़ायरफ़ॉक्स द्वारा समर्थित है।
अलकोंजा

हां, मैं IE 9 का उपयोग कर रहा हूं, और यह निश्चित रूप से यहां काम नहीं करता है। मैं इसे फ़ायरफ़ॉक्स पर आज़माऊँगा। धन्यवाद।
केविन फेगन

1

जावास्क्रिप्ट (ईएस 6) 184

हमेशा की तरह, फ़ायर्फ़ॉक्स कंसोल में परीक्षण करें और 200 बार दबाने के लिए तैयार रहें या बदल alertदें ।console.logescape

R=x=>Math.random()*++x|0
for(l='ABCDEFGHIKJLMNOPQRSTUVWXYZ',i=0,u={};i<200;)
!(/69|666|ASS|SHT|KKK/.test(k=l[R(25)]+l[R(25)]+l[R(25)]+'-'+R(9)+R(9)+R(9))&u[k])&&alert(k,u[k]=++i);

मैं कंसोल के बारे में नहीं जानता, लेकिन फ़ायरफ़ॉक्स को निष्क्रिय करने की पेशकश शुरू होने से पहले वेब पेजों को केवल 5 निःशुल्क अलर्ट की अनुमति है: mxr.mozilla.org/mozilla-central/…
नील

@ निश्चित रूप से, लेकिन अक्षम करने की पेशकश अक्षम नहीं है। क्या आपको 200 (या अधिक कोडगुल्फ़ .stackexchange.com/a/32278/21348 ) पॉपअप का आनंद नहीं लेना चाहिए ?
edc65

1

पायथन 3, 257 चार्ट

import string as X,re,random as R
I=[0,1,2]
s={}
while len(s)<200:
 L=R.sample([[R.choice(X.digits) for i in I],[R.choice(X.ascii_uppercase) for i in I]],2);L=''.join(L[0]+['-']+L[1])
 if re.search('ASS|KKK|SHT|69|666',L) or L in s:continue
 print(L);s[L]=0

नमूना उत्पादन:

# python3 shortened.py
EUN-215
546-SIL
464-ZTR
XIX-794

1
आप ;इसके बजाय लाइन 5 और 6 को अलग करके एक बाइट बचा सकते हैं \n
अंडरग्राउंडोरेल

@undergroundmonorail, आप सही हैं, धन्यवाद!
क्रिस्टियन सियुपिटु

1

पीएचपी, 167

while(count($a)<200){$c="";for(;++$y&3;)$c.=chr(rand(65,90));$d=rand(100,999);$c=rand()&1?"$d-$c":"$c-$d";preg_match("/ASS|666|69|KKK|SHT/",$c)||$a[$c]=1;}print_r($a);

यह वर्तमान की सबसे अच्छी PHP की तुलना में 100 चार्ट कम है :)

while(count($a)<200)
{
    $c="";
    for(;++$y&3;) $c.=chr(rand(65,90));
    $d=rand(100,999);
    $c=rand()&1?"$d-$c":"$c-$d";
    preg_match("/ASS|666|69|KKK|SHT/",$c)||$a[$c]=1;
}
print_r($a);

आशा है कि ये आपको पसंद हैं। मामले में इसकी अनुमति है:

while(count($a)<200){$c="";for(;++$y&3;)$c.=chr(rand(65,90));$c.=-rand(100,999);preg_match("/ASS|666|69|KKK|SHT/",$c)||$a[$c]=1;}print_r($a);

केवल 141 वर्ण है लेकिन वर्ण और संख्या में फेरबदल नहीं करता है। किसी भी सुझाव वेलकम :)


1

एफ #, 264 वर्ण

वास्तव में गोल्फिंग के लिए डिज़ाइन की गई भाषा नहीं है, लेकिन मुझे यकीन है कि इसमें सुधार किया जा सकता है। एक लैम्ब्डा के साथ Seq.exists का उपयोग करना बहुत कष्टप्रद है, क्योंकि कई पार्न्स और अंतर्निहित रूपांतरण की कमी है।

पुनरावृत्ति का उपयोग करता है, हमेशा के लिए जा रहा है।

let g=System.Random()
let c()=char(g.Next(65,90))
let k(i:string)l=Seq.exists(fun e->i.Contains(e))l
let rec p d:unit=
 let l=sprintf"%i-%c%c%c"(g.Next(100,999))(c())(c())(c())
 if k l d||k l ["ASS";"666";"69";"KKK";"SHT"]then p d else
  printfn"%s"l
  p(l::d)
p[]

एफएसआई में चलाया जा सकता है।


1

अजगर 203

मुझे यकीन नहीं है कि यह तकनीकी रूप से मायने रखता है, लेकिन मुझे यह पसंद आया इसलिए मैं इसे वैसे भी पोस्ट कर रहा हूं। हालांकि, मैं छद्म-यादृच्छिक रूप से उत्तर उत्पन्न करता हूं, जैसा कि सभी ने किया है, मैंने रणनीतिक रूप से यादृच्छिक बीज को उठाया है ताकि अमान्य उत्तर आउटपुट में समाप्त न हों। इसलिए, मेरा उत्तर वास्तव में वैध उत्तरों के पूरे सेट को उत्पन्न करने में सक्षम नहीं है, बिना अमान्य लोगों को भी उत्पन्न किए।

from random import*;seed(1);L='ABCDEFGHIJKLMNOPQRSTUVWXYZ';D='0123456789';C=choice
for i in 'x'*200:s=randint(0,1);a=''.join(C(L)for _ in'000');b=''.join(C(D)for _ in'000');i=[a,b];print i[s-1]+'-'+i[s]

1

पर्ल - 123 वर्ण

while(@p<200){$l=(AAA..ZZZ)[int rand 999]."-".(100+int rand 899);@p=grep!/ASS|666|69|KKK|SHT|$l/,@p;push@p,$l}$,=$/;print@p

Ungolfed:

while(@p < 200){ # Repeat until we get 200 plates
    $l = (AAA..ZZZ)[int rand 999]."-".(100+int rand 899); # generate the license plate
    @p = grep !/ASS|666|69|KKK|SHT|$l/, @p; # remove disallowed license ones and duplicates
    push @p, $l # add a license plate
}
$,=$/; # so they print with newlines
print @p # print the plates

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


1

जावास्क्रिप्ट - 283 327 वर्ण

संपादित करें:

अल्कोंजा से सुझावों को लागू करने के बाद , यहाँ मेरा नया संस्करण है:

m=Math.random;function y(v){return "ASS|KKK|SHT|666".indexOf(v)<0&&v.indexOf("69")<0?0:!0}function c(){return String.fromCharCode(m()*26+65)}for(i=0;i<200;i++){do {do {n=(m()+"").slice(2,5)}while(y(n));do {l=c()+c()+c()}while(y(l));r=l+"-"+n}while(o.indexOf(r)>=0);o+=r+"\n"}alert(o)
/* 1 line - 283 Characters */

1) चर निकालें: s और शाब्दिक उपयोग करें: "\ n" [-4] [323]
2) "var o =" ", i, r, n, l," [-17] [306]
3) निकालें परिवर्तनीय: t और शाब्दिक का उपयोग करें: "ASS | KKK | SHT | 666" [-4] [302]
4) सेट m = Math.random और इसके बजाय "m" का उपयोग करें [-7] [296]
5) Use (m) ) + "") बजाय m ()। toString () [-6] [290]
6) अनावश्यक हटा दें ";" [-7] [283]



पुराना संस्करण: जावास्क्रिप्ट - 327 वर्ण

मुझे यकीन है कि सुधार के लिए कुछ जगह है ... मैं कोड-गोल्फिंग में बहुत अनुभवहीन हूं:

var o="",s="\n",i,r,n,l,t="ASS|KKK|SHT|666";function y(v){return t.indexOf(v)<0&&v.indexOf("69")<0?0:!0;}function c(){return String.fromCharCode(Math.random()*26+65);}for(i=0;i<200;i++){do {do {n=Math.random().toString().slice(2,5);}while(y(n));do {l=c()+c()+c();}while(y(l));r=l+"-"+n;}while(o.indexOf(r)>=0);o+=r+s;}alert(o);    
/* 1 line - 327 Characters */


यहाँ "अन-मिनिफ़ाइड" वैरिएबल / फंक्शन नामों के साथ एक स्वरूपित, "अनगुल्ड" संस्करण है:

var outp="",lsep="\n",ndx,res,nbr,ltr,tbl="ASS|KKK|SHT|666";
function fnvfy(vinp){
  return tbl.indexOf(vinp)<0&&vinp.indexOf("69")<0?0:!0;
}
function fnchr(){
  return String.fromCharCode(Math.random()*26+65);
}
for(ndx=0;ndx<200;ndx++){
  do {
    do {
      nbr=Math.random().toString().slice(2,5);
    }
    while(fnvfy(nbr));
    do {
      ltr=fnchr()+fnchr()+fnchr();
    }
    while(fnvfy(ltr));
    res=ltr+"-"+nbr;
  }
  while(outp.indexOf(res)>=0);
  outp+=res+lsep;
}
alert(outp);



यहां एक "डीबग" संस्करण है जिसे ब्राउज़र पसंदीदा / बुकमार्क के URL में चिपकाया जा सकता है। आउटपुट "अलर्ट ()" के बजाय एक नई "विंडो" पर "TEXTAREA" में रखा गया है:

javascript:(function(){var outp="",lsep="\n",ndx,res,nbr,ltr,tbl="ASS|KKK|SHT|666";function fnvfy(vinp){return tbl.indexOf(vinp)<0&&vinp.indexOf("69")<0?0:!0;}function fnchr(){return String.fromCharCode(Math.random()*26+65);}for(ndx=0;ndx<200;ndx++){do {do {nbr=Math.random().toString().slice(2,5);}while(fnvfy(nbr));do {ltr=fnchr()+fnchr()+fnchr();}while(fnvfy(ltr));res=ltr+"-"+nbr;}while(outp.indexOf(res)>=0);outp+=res+lsep;}var x=window.open();x.document.write('<head>\n</head>\n<body>\n<form name=sa><textarea name=t rows=25 cols=80 wrap>'+outp+'</textarea><br />\n</body>\n');x.document.close();})()
/* */

यहाँ "डीबग" संस्करण है, स्वरूपित:

javascript:
(function(){
  var outp="",lsep="\n",ndx,res,nbr,ltr,tbl="ASS|KKK|SHT|666";
  function fnvfy(vinp){
    return tbl.indexOf(vinp)<0&&vinp.indexOf("69")<0?0:!0;
  }
  function fnchr(){
    return String.fromCharCode(Math.random()*26+65);
  }
  for(ndx=0;ndx<200;ndx++){
    do {
      do {
        nbr=Math.random().toString().slice(2,5);
      }
      while(fnvfy(nbr));
      do {
        ltr=fnchr()+fnchr()+fnchr();
      }
      while(fnvfy(ltr));
      res=ltr+"-"+nbr;
    }
    while(outp.indexOf(res)>=0);
    outp+=res+lsep;
  }
  var x=window.open();
  x.document.write('<head>\n</head>\n<body>\n<form name=sa><textarea name=t rows=25 cols=80 wrap>'+outp+'</textarea><br />\n</body>\n');
  x.document.close();
}
)()

2
अपने वास्तविक एल्गोरिदम को छूने के बिना, यहां कुछ सामान्य जावास्क्रिप्ट गोल्फिंग युक्तियां दी गई हैं: जावास्क्रिप्ट स्वाभाविक रूप से खराब सिंटैक्स के साथ क्षमा कर रहा है, इसलिए आपको उपयोग करने की आवश्यकता नहीं है var(बस असाइन करना होगा, 323 ), आपको ;तब तक एस की आवश्यकता नहीं है जब तक कि एक और कथन का पालन न करें। (उदाहरण। पंक्ति में अंतिम वर्ण, या }( 316 ) से पहले , ऐसी किसी भी चीज़ के लिए देखें जो केवल इनलाइन की तुलना में घोषित करने / उपयोग करने के लिए अधिक स्थान लेती है (उदाहरण के लिए s, आपका चर, 312 ), इसके लिए डिट्टो अगर कुछ से अधिक उपयोग किया जाता है। एक बार (उदाहरण के Math.random(...)लिए r=Math.random ... r(...), 307 , (x+"")की तुलना में कम है x.toString(), 300
Alconja

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