Scrieți un program sau o funcție care imprimă sau returnează un șir de caractere alfanumerice plus subliniere, în orice ordine . Pentru a fi precis, trebuie să fie afișate următoarele caractere, și nu mai mult :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ 

Când tipăriți pe stdout, este permisă o linie nouă opțională după ieșire.

Constantele încorporate care conțin 9 sau mai multe dintre caracterele de mai sus sunt interzise.


Cel mai scurt cod în octeți câștigă.

Acesta este un provocare foarte simplă, care cred că va genera totuși câteva răspunsuri interesante.


Clasamente

Iată un fragment Stack pentru a genera atât un clasament obișnuit, cât și o prezentare generală câștigătorilor în funcție de limbă.

Pentru a vă asigura că răspunsul dvs. apare, vă rugăm să începeți răspunsul cu un titlu, utilizând următorul șablon Markdown:

# Language Name, N bytes 

unde N este dimensiunea trimiterii dvs. Dacă vă îmbunătățiți scorul, puteți puteți păstra scorurile vechi în titlu, lovindu-le. De exemplu:

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

Dacă acolo doriți să includeți mai multe numere în antetul dvs. (de exemplu, pentru că scorul dvs. este suma a două fișiere sau doriți să listați interpretul indică penalizările separat), asigurați-vă că scorul real este ultimul număr din antet:

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

Puteți face și nume de limbă un link care va apărea apoi în fragmentul clasamentului:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes 
 var QUESTION_ID=85666,OVERRIDE_USER=4162;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i; 
 body{text-align:left!important}#answer-list,#language-list{padding:10px;float:left}table thead{font-weight:700}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> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody> </tbody> </table> </div><div> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody> </tbody> </table> </div><table style="display: none"> <tbody> <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> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> 

Comentarii

  • Comentariile nu sunt pentru discuții extinse; această conversație a fost mutată în chat .

Răspuns

Convex, 9 octeți

Metodă nouă! De asemenea, mi-am dat seama că este exact la fel ca răspunsul lui Luis, dar în Convex, dar am venit cu asta independent.

"{,®\W"Oò 

Încercați-l online!

Explicație:

"{, Array of chars from NUL to "z ®\W" Regex to match non-word characters Oò Replace all matches with emtpy string 

Soluție veche, 10 octeți :

A,"[,_¬^"_ 

Încercați-l online!

Explicație:

A, 0-9 "[,_¬^ A-Za-z "_ _ 

Comentarii

  • @ mbomb007 Da, este echivalent cu codul CJam A,'[,_el^'_
  • Ce codificare este aceasta?
  • @ CᴏɴᴏʀO ' Bʀɪᴇɴ CP-1252 sau Windows-1252

Răspuns

Ruby, 26 octeți

Caracterele pot fi tipărite în orice ordine? minte dacă o fac!

Încearcă-l online!

$><<(?0..?z).grep(/\w/)*"" 

Răspuns

Perl, 20 octeți

Necesită -E fără costuri suplimentare .

 say+a.._,A.._,_..9,_  

Deci, răspunsul meu original (mai jos) a fost cam prea plictisitor . Singurul lucru pe care am reușit să-l descopăr este cel de mai sus, care este exact la fel, dar pare puțin mai confuz … Este aproape exact echivalent cu cel de mai jos:

 say a..z,A..Z,0..9,_  

Îmi place @ msh210 „s sugestii în comentarii, dar acestea sunt „puțin prea lungi!

Comentarii

  • +1. Puțin mai interesant, dar mai lung este oricare dintre acestea , toți cei 27 de octeți: say grep/\w/,map chr,1..122 || say map{chr=~/\w/;$&}1..122 || say map{chr=~s/\W//r}1..122
  • @ msh210 Totuși, ' nu se poate micșora mai mult … Gestionat totuși un 25: say chr=~/\w/g for 1..255

Răspuns

Cheddar, 31 27 octeți

->97@"123+65@"91+48@"58+"_" 

Aceasta prezintă bine operatorul @"

Nu completează, deoarece în cele din urmă am reușit să repar @" operator. Bugul era acela genera un interval Cheddar, nu un interval JS, deci nu putea funcționa corect


Explicație

Operatorul @" era proiectat de @ CᴏɴᴏʀO „Bʀɪᴇɴ, și ceea ce face este să genereze o serie de șiruri de la LHS la RHS.Când este utilizat ca operator unar, returnează caracterul la punctul de cod dat (cum ar fi python „s chr)

Ungolfed

-> 97 @" 123 + 65 @" 91 + 48 @" 58 + "_" 

Răspuns

brainfuck, 58 bytes

 +++[[<+>->++<]>]<<[-<->]<<-.+<<++[->>+.>+.<<<]<--[->>.+<<]  

Încercați-l online .

Inițializează bandă la 3 · 2 n și funcționează de acolo.

 +++[[<+>->++<]>] initialize the tape | 0 | 3 | 6 | 12 | 24 | 48 | 96 | 192 | 128 | 0 | 0 | ^ <<[-<->] subract 128 from 192 | 0 | 3 | 6 | 12 | 24 | 48 | 96 | 64 | 0 | 0 | 0 | ^ <<-.+<<++ ouput "_"; increment 24 twice | 0 | 3 | 6 | 12 | 26 | 48 | 96 | 64 | 0 | 0 | 0 | ^ [->>+.>+.<<<] output aAbBcC ~ zZ | 0 | 3 | 6 | 12 | 0 | 48 | 122 | 90 | 0 | 0 | 0 | ^ <--[->>.+<<] decrement 12 twice; output 0 ~ 9 | 0 | 3 | 6 | 0 | 0 | 58 | 122 | 90 | 0 | 0 | 0 | ^  

Răspuns

JavaScript (ES6), 62 octeți

_=>String.fromCharCode(...Array(123).keys()).replace(/\W/g,"") 

Returnează 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, deci doar 6 octeți mai scurt decât o funcție care returnează șirul literal. Da, este suge.

Comentarii

  • Puteți încerca să găsiți un șir pentru care btoa returnează rezultatul necesar.
  • @gcampbell 60! (60 factoriale) șirurile ar putea dura ceva timp pentru a căuta …
  • Puteți folosi doar atob.
  • @gcampbell Trebuie să excludeți șirurile nereprezentabile cumva.
  • @gcampbell Se pare că versiunea btoa ia 62 de octeți oricum: 45 pentru a codifica 60 alfanumerice, 3 caractere necodificate (inclusiv _) și 14 pentru _=>atob("")+"".

Răspuns

Haskell, 38 octeți

"_":["a".."z"]++["A".."Z"]++["0".."9"] 

Nimic de explicat aici.

Comentarii

  • întrebare: care ' este diferența dintre : și ++?
  • @Downgoat: ++ ia două șiruri și le concatenează. : ia un caracter și un șir și pune caracterul în fața șirului. "_"++['a'..'z']... funcționează, de asemenea, dar este cu un octet mai lung.

Răspuns

PowerShell v3 +, 35 33 octeți

-join([char[]](1..127)-match"\w") 

Construiește o matrice dinamică 1..127 , îl aruncă ca o matrice char. Aceasta este „alimentată către operatorul -match care lucrează la regex \w, care va returna toate elementele care se potrivesc (adică exact alfanumerice și subliniere) ). Încapsulăm acele elemente ale matricei într-un -join pentru a le grupa ca un șir. Acest lucru este lăsat pe conductă și rezultatul este implicit.

Comentarii / h3>

  • Hei, ' nu este corect. Soluția mea este identică, cu excepția faptului că am început la 0
  • @Joey Trebuie să merg repede. : D
  • Mai ales pentru soluțiile banale și evidente, cred 😉

Răspuns

V, 27 octeți

i1122ñYpñvHgJ|éidd@"Í× 

Încercați-l online!

Acest răspuns este îngrozitor de complicat. Voi posta o explicație mai târziu.

Hexdump:

00000000: 6916 1631 1b31 3232 f159 7001 f176 4867 i..1.122.Yp..vHg 00000010: 4a7c e969 6464 4022 1bcd d7 J|.idd@"... 

Explicație:

Citibil:

i<C-v><C-v>1<esc> "Insert the text "<C-v>1" "<C-v> means "literal" 122ñ ñ "122 times, Yp "Duplicate this line <C-a> "And increment the first number on this line vHgJ "Join every line together |éi "Insert an "i" at the beginning of this line dd "Delete this line @"<esc> "And execute it as V code. "That will generate every ascii value from 1-123 Í× "Now remove every non-word character. 

Comentarii

  • : D: D: D Cheddar este legat cu un lang de golf!

Răspuns

J, 30 29 28 octeți

Am salvat un octet datorită randomra!

~.u:95,;48 65 97+i."*10,,~26 

Ieșire:

 ~.u:95,;48 65 97+i."*10,,~26 _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

Explicație

Nu voi oferi o explicație în sine , dar voi oferi rezultate intermediare.

 10,,~26 10 26 26 i. b. 0 1 _ _ * b. 0 0 0 0 i."* b. 0 i."*2 3 4 0 1 0 0 0 1 2 0 0 1 2 3 i. 2 0 1 i. 3 0 1 2 i. 4 0 1 2 3 i."*10,,~26 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 1 2 + i."*10,,~26 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 48 65 97+i."*10,,~26 48 49 50 51 52 53 54 55 56 57 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 ;48 65 97+i."*10,,~26 48 49 50 51 52 53 54 55 56 57 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 95,;48 65 97+i."*10,,~26 95 48 49 50 51 52 53 54 55 56 57 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 ... u:95,;48 65 97+i."*10,,~26 _01234567890000000000000000ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ~.u:95,;48 65 97+i."*10,,~26 _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

Răspuns

Haskell, 31 octeți

 do(x,y)<-zip"aA0_""zZ9_";[x..y]  

Expresia zip "aA0_" "zZ9_" oferă lista punctelor finale [("a","z"),("A","Z"),("0","9"),("_","_")]. div id = „77c0d2706f”>

notația duce fiecare (x,y) la \(x,y)->[x..y] inclusiv și concatenează rezultatul s. Mulțumim lui Anders Kaseorg pentru doi octeți cu do în loc de >>=.

Comparați cu alternativele:

 do(x,y)<-zip"aA0_""zZ9_";[x..y] zip"aA0_""zZ9_">>= \(x,y)->[x..y] f(x,y)=[x..y];f=<<zip"aA0_""zZ9_" id=<<zipWith enumFromTo"aA0_""zZ9_" [c|(a,b)<-zip"aA0_""zZ9_",c<-[a..b]] f[x,y]=[x..y];f=<<words"az AZ 09 __"  

Comentarii

  • do salvează doi octeți: do(x,y)<-zip"aA0_""zZ9_";[x..y]

Răspuns

C, 50 bytes

Apelați f() fără niciun argument.

f(n){for(n=128;--n;)isalnum(n)|n==95&&putchar(n);} 

Tipăriri

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210 

Comentarii

  • isalnum(n)|n==95&&putchar(n)
  • Există ' acolo UB. Nu ' nu ați transmis argumentele necesare.
  • @orlp – Ați folosit putc în loc de putchar. putc așteaptă să scrie și un flux, pe care nu l-ați trecut '.Funcția în sine funcționează bine (încercați să eliminați cu totul putc și funcționează).
  • @owacoder Hopa!
  • @QPaysTaxes care ' este greșit. If the number of arguments does not equal the number of parameters, the behavior is undefined. 6.5.2.2/6, consultați N1570 .

Răspuns

/// , 63 octeți

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ 

Comentarii

  • Cum este răspunsul valid? Se pare că ' încalcă regulile.
  • @nicael care regulă?
  • " Constantele încorporate care conțin 9 sau mai multe dintre caracterele de mai sus sunt interzise. " … Îmi lipsește ceva evident, @Leaky?
  • Da, că acest lucru nu ' nu a folosit nicio constantă încorporată.
  • Bine, dar acest lucru este cel puțin ciudat. Cu siguranță, OP nu ' nu vă cere să copiați-lipiți secvența, ceea ce ' nu este interesant.

Răspuns

Python 3, 58 octeți

print("_",*filter(str.isalnum,map(chr,range(123))),sep="") 

Un program complet care se tipărește în STDOUT.

Ieșirea este: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Cum funcționează

map(chr,range(123)) Yield an iterator containing all ascii characters with code-points in [0,122]... *filter(str.isalnum,...) ...keep characters if alphanumeric and unpack into tuple... print("_",...,sep="") ...add underscore and print all characters with no separating space 

Încercați-l pe Ideone

Dacă s-ar permite constante de șir, următoarele ar fi fost de 45 de octeți:

from string import* print("_"+printable[:62]) 

Comentarii

  • print('_'+*filter(str.isalnum,map(chr,range(123))))
  • @LeakyNun Aceasta generează o eroare de sintaxă. M-am gândit să fac ceva similar cu print('_',*filter(str.isalnum,map(chr,range(123)))), dar care imprimă spații separate; OP a spus în comentarii că ' … nu sunt permise deloc spații în ieșire '.
  • Python 2 poate salva un octet cu această abordare: print''.join(filter(str.isalnum,map(chr,range(123)))),'_'

Răspuns

Prima mea încercare de codegolf!

C #, 168 152 150 147 130 127 117 116 115 109 106 octeți

for(var a="0";a<"~";a++){Console.Write(System.Text.RegularExpressions.Regex.IsMatch(a+"","\\w")?a+"":"");} 

Mulțumesc mult lui aloisdg, AstroDan, Leaky Nun și Kevin Lau – nu Kenny pentru tot ajutorul din comentarii.

Comentarii

  • Bine ați venit la PPCG! Simțiți-vă liber să eliminați tot spațiul! De asemenea, verificați Sfaturi pentru golf în C # pentru câteva sfaturi.
  • Minunat – mi-am salvat încă 2 octeți. ' Încep cu adevărat să-mi placă acest codegolf 🙂
  • AFAIK, clasa \w regex acoperă alfanumerica și de asemenea, _, ceea ce ar trebui să facă "\\w" suficient de valabil pentru funcția dvs. de potrivire regex.
  • Codul dvs. ar trebui să fie o funcție sau un program complet nu o declarație. De asemenea, utilizați .NetFiddle pentru a partaja o demonstrație a codului dvs. 🙂
  • " C # isn ' codegolf " Mi se pare suficient de distractiv C # pentru a codifica golful. Cred că este un limbaj mainstream excelent cu care să te joci. Dacă sunteți aici pentru a câștiga, veți pierde. Definiți-vă obiectivul ca învățare și distracție și veți câștiga tot timpul.

Răspuns

Pur bash, 32

 printf %s {a..z} {A..Z} {0..9} _  

Ideone .

Răspuns

Object Pascal, 85 83 73 octeți

Doar obiect pascal simplu folosind un set de caractere. Scrierea unui program complet în loc de o procedură elimină 2 octeți. Eliminarea cuvântului cheie al programului rade încă 10 octeți.

var c:char;begin for c in["a".."z","A".."Z","0".."9","_"]do write(c);end. 

Comentarii

  • Am fost întotdeauna și probabil o voi face fi întotdeauna confundat cu clasificarea exactă a Object Pascal. Turbo / Borland Pascal și FreePascal sunt cu siguranță fericiți fără cuvântul inutil program.
  • @manatwork Nu am făcut ' t stii asta. În mod ciudat, acum face ca pascal să fie competitiv aici …
  • Limba cu care am crescut. Știu că încă nu a murit …
  • @rexkogitans Da, am învățat-o la școală, dar nu îmi pot aminti nimic de atunci … ' ' mă joc din nou cu unele programe acum

Răspuns

bash – 47 37 octeți

man sh|egrep -o \\w|sort -u|tr -d \\n 

Ieșirea pe sistemul meu este:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 

Mulțumim Digital Trauma pentru sugestii utile.

Pe unele sisteme este posibil să puteți utiliza ascii în loc de man sh pentru a salva un octet.

Comentarii

  • man sh|egrep -io _\|\\w|sort -u|tr -d \\n
  • @DigitalTrauma Vă mulțumim!Experimentat și descoperit \w se potrivește cu _ și este deja nesensibil la majuscule, deci s-ar putea scurta și mai mult.
  • env în loc de man sh ar trebui să funcționeze pe majoritatea mediilor. O face pe a mea. $ env|egrep -o \\w|sort -u|tr -d \\n – > 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.
  • Acolo ' s no J. Rău.

Răspuns

PHP, 40 octeți

 _0<?for(;$a++^9?$a^q:$a=A;)echo" $a"|$a;  

Demo online .

Comentarii

  • +1 pentru excelență. Notă laterală: PHP 7.2 generează avertismente menționând că versiunile viitoare vor genera erori pentru constantele nedefinite. 🙁

Răspuns

Retina , 30 19 16 15 12 octeți

Mi-am modificat încercare de alfabet original pentru această versiune recentă. Fiecare caracter este tipărit în buclă.

Prima linie este goală.

 ; +T\`;w`w_

Încercați online

Ieșire:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

Mulțumesc Leaky Nun pentru că a jucat cu 4 octeți de la ultima mea încercare.

Comentarii

  • I ' spune că w contează ca o constantă care conține 9 sau mai multe dintre caracterele necesare. ' va trebui probabil să extindeți partea dreaptă și să înlocuiți w din stânga cu o. Deși salvați un octet utilizând EO în loc de d, deoarece conțin doar 5 caractere fiecare.
  • @ mbomb007 w în stadiul transliterării nu are nimic de-a face cu regex. ' este o scurtătură care se extinde la o listă cu cele 63 de caractere necesare. Cel puțin eu ' aș întreba orlp despre acest caz în mod specific, deoarece ' este destul de diferit de utilizarea \w într-un regex.

Răspuns

MATL , 11 octeți

7W:"\W"[]YX 

Încercați-l online!

7W % Push 2 raised to 7, i.e. 128 : % Range [1 2 ... 128] "\W" % Push string to be used as regex pattern [] % Push empty array YX % Regex replace. Uses (and consumes) three inputs: source text, regex pattern, % target text. The first input (source text) is implicitly converted to char. % So this replaces non-word characters by nothing. % Implicitly display 

Comentarii

  • Cu 2 octeți mai scurt: 8W:'\w'XX
  • @DrGreenEggsandIronMan Mulțumesc! Dar cred că noile linii nu sunt permise ca separatoare. Provocarea spune " un șir de caractere alfanumerice plus subliniere … și nu mai există "
  • Deci de ce ' nu ai putut 8W:'\w'XX! pe care l-am încercat, dar nu ' nu funcționează
  • @DrGreenEggsandIronMan Întrebare foarte bună! Permiteți-mi să vă răspund în chat , astfel încât să pot folosi un pic mai multe caractere

Răspunde

Brachylog , 25 octeți

"_"w9yrcw"A":"Z"ycL@l:Lcw 

Aceasta tipărește următoarele în STDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 

Explicație

"_"w Write "_" 9y Get the list [0:1:2:3:4:5:6:7:8:9] rcw Reverse it, concatenate into one number, write "A":"Z"y Get the list of all uppercase letters cL Concatenate into a single string L @l:Lcw Concatenate L to itself lowercased and write 

Răspuns

Dyalog APL , 18 bytes

∊"\w"⎕S"&"⎕UCS⍳255 

printuri:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz 

Comentarii

  • @user Constantele încorporate care conțin 9 sau mai multe dintre caracterele de mai sus sunt interzise.

Răspuns

Pyth, 13 12 octeți

s:#"\w"0rk\| 

Încercați-l online!

Găsește toate caracterele din U + 0000 până la U + 007B care se potrivește cu regexul /\w/.

O utputs 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.

abordare alternativă: 15 octeți

ssrMc4"0:A[a{_` 

Încercați-l online!

generează practic intervalele pe jumătate incluse: 0-:, A-[, a-{, _-`.

Răspuns

CJam , 15 14 11 octeți

4 octeți reducere datorită @FryAmTheEggman și @Dennis!

A,"[,_el^"_ 

Încercați online!

A, e# Push range [0 1 ... 9] "[, e# Push range of chars from 0 to "Z" ("[" minus 1) _el e# Duplicate and convert to lowercase ^ e# Symmetric difference. This keeps letters only, both upper- and lower-case "_ e# Push "_". e# Implicitly display stack contents, without separators 

Răspuns

Brainfuck, 89 bytes

+++++++++[>+++++>+<<-]>+++.>[<+.>-]<+++++++>>+++++++++++++[<+<+.+.>>-]<<+++++.+>[<+.+.>-] 

Încercați aici

Detalii:

+++++++++[>+++++>+<<-]>+++. Goes to "0" while remembering a 9 for the 9 other numbers [<+.>-] Simply prints for the next 9 characters <+++++++> Moves it 7 space to the letters >+++++++++++++ Saves a 13 [<+<+.+.>>-] Prints 2 char at a time while making a second "13" space <<+++++.+> Moves 5, prints "_" and moves to the lowercases [<+.+.>-] And again the double print 

Dacă aș fi putut comenta, ar trebui să îmbunătățesc răspunsurile celorlalți. Dar, din moment ce nu pot, aș putea să-l postez pe al meu. Pe măsură ce am început să scriu acest lucru, cel mai mic BF avea 96 de lungimi.

Răspuns

F #, 50 59 octeți

Seq.iter(printf"%c"<<char)(95::[48..57]@[65..90]@[97..122]) 

Ieșire:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

Edit: a ratat cifrele prima dată

Edit2, inspirat de această soluție Haskell acest fragment F # este 67 octeți.

Seq.zip"aA0_""zZ9_"|>Seq.iter(fun(x,y)->Seq.iter(printf"%c")[x..y]) 

Ieșire:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ 

Răspuns

Hexagony, 33

"A}_8_47<=">({a/[email protected]!\356);"); 

Extins:

 " A } _ 8 _ 4 7 < = " > ( { a / _ x . @ . 9 ! \ 3 5 6 ) ; " ) ; . . . . 

Ieșire:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_ 

Încercați online!

Rețineți că există un caracter neprimabil 0x1A ca primul octet al programului. Aceasta face, de asemenea, ca primul rând al Hexagonului extins să pară dezactivat. Multe mulțumiri lui Martin pentru arătându-mi acest truc, precum și pentru sugerarea algoritmului pentru tipărirea t alfabetul!

Aceasta tipărește alfabetul stocând a și A pe două margini ale unui hexagon și numărul 26 pe marginea hexagonului care atinge îmbinarea dintre litere. Arată cam așa:

A \ / a | 26 

Apoi introduce un bucle care tipărește literele, apoi le mărește, apoi scade numărul. După o iterație am avea:

B \ / b | 25 

Și așa mai departe. Codul liniar pentru inițializare este: 0x1A " A } a. Codul liniar pentru buclele din afara modificărilor fluxului de control este: ; ) " ; ) { ( " =.

Odată ce contorul ajunge la zero, urmăm o cale diferită pentru a imprima numerele și un sublinia. Scris liniar, acesta este: x 3 5 6 8 4 7 9 ! ; { @. Aceasta înlocuiește valoarea marginii curente a memoriei cu numărul 1203568479 (rețineți că x „codul ASCII este 120), care conține toate cifrele zecimale. Tipărim acest număr și apoi folosim o caracteristică elegantă a Hexagoniei: tipărim numărul mod 256 ca caracter ASCII. Acest lucru se întâmplă doar să fie 95 sau subliniat.

Răspuns

Brainfuck, 114 103 98 90 76 71 octeți

Un alt trivial (acum non -trivial), dar de data aceasta este BF!

S-au salvat 14 (!) octeți datorită @primo.

S-au salvat încă 4 octeți datorită sugestiei lui @primo de a genera raza de acțiune înapoi și am salvat altul incrementând înainte de a imprima pentru literele mici.

Nou (recurență 4, 71):

+[--[<+++++++>->+<]>-]<<+++<--<-<-----<++++.+>>>[-<<.+<+.>>>]>[-<<.+>>] 

Vechi (valori, 114):

-[----->+<]>--->++++++++++>--[----->+<]>-------.++>----[---->+<]>++>++++[->++++++<]>++[-<<.+<<.+>>>>]<<<<<<[-<.+>] 

Vechi (recurență 1, 103):

++++++++++[[<+>->+<]>+++++++++++++++]<<[<]>>+>++++++++>>----->>-----.++<<<<<[->>>.+>>.+<<<<<]<[->>.+<<] 

Vechi (recurență 2, 90):

+++++++[[<+>->+<]>>+++[-<+++++++>]<]<<[<]>+++>-->->----->++++.++<<<[->>.+>.+<<<]<[->>.+<<] 

Vechi (recurență 3, 76):

+[[<+++++++>->+<]>+++]<<[<]>+++>-->->----->++++.++<<<[->>.+>.+<<<]<[->>.+<<] 

Presupune celule de împachetare de 8 biți și memorie de împachetare. Am folosit Încercați-l online .

Toate tipărite _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

Mai întâi, această parte

+[--[<+++++++>->+<]>-]<< 

inițializează caseta cu aceste valori

[91, 70, 49, 21, 7] ^ 

Acest lucru funcționează deoarece relația de recurență pe care am modelat-o practic este f(x) = 7 * (3 * x + 1), înapoi. Consultați @primo „Bună ziua, lume! Răspundeți pentru o explicație a ceea ce este o relație de recurență.

Apoi, este destul de simplu pentru a schimba aceste valori la cele utile. (și tipăriți sublinierea)

Code: +++<--<-<-----<++++.+ Tape: [96, 65, 48, 26, 10] ^ 

Apoi, buclele simple folosesc valorile pentru a imprima restul de caractere. Economisesc 1 octet având un increment înainte de tipărire.

>>>[-<<.+<+.>>>]>[-<<.+>>] 

Trebuie să găsesc o generație de secvență mai scurtă.

Am găsit o relație de recurență care pare să funcționeze bine, dar s-ar putea să existe una mai scurtă cu mai puțină vânătoare și peck.

Am folosit un calculator de regresie liniară pentru a găsi care ar trebui să fie cea mai scurtă relație de recurență liniară posibilă, așa că probabil ar trebui să găsesc o altă formulă dacă vreau să îmbunătățesc. h3> Comentarii

  • Ce zici de o construcție inversă? +[--[<+++++++>->+<]>-]
  • @primo Wow! Cum funcționează acest lucru?
  • 3 este neuniform, deci va avea o buclă completă de 256 de ori. Încheind cu >-], puteți fi sigur că termenul final va fi 1 (x7). De fapt, ar trebui să începeți cu -, se termină mult mai repede.

Răspuns

Sesos , 17 octeți

00000000: a854be 2cbc9e 71d597 14bc56 1ad99e 713b .T.,..q....V...q; 

Ieșire

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_ 

Încercați-l online! Bifați Depanare pentru a vedea codul binar generat.

Cum funcționează

Fișierul binar de mai sus a fost generat prin asamblarea următorului cod SASM.

 add 48 ; Set cell 0 to 48 ("0"). fwd 1 ; Advance to cell 1. add 10 ; Set cell 1 to 10. jmp ; Set an entry marker and jump to the jnz instruction. rwd 1 ; Retrocede to cell 0. put ; Print its content (initially "0"). add 1 ; Increment cell 0 ("0" -> "1", etc.). fwd 1 ; Advance to cell 1. sub 1 ; Decrement cell 1. jnz ; While cell 1 in non-zero, jump to "rwd 1". ; This loop will print "0123456789". rwd 1 ; Retrocede to cell 0, which holds 48 + 10 = 58. add 7 ; Set cell 0 to 65 ("A"). fwd 1 ; Advance to cell 1. add 26 ; Set cell 1 to 26. jmp ; Set an entry marker and jump to the jnz instruction. rwd 1 ; Retrocede to cell 0. put ; Print its content (initially "A"). add 32 ; Add 32 to convert to lowercase ("A" -> "a", etc.). put ; Print the cell"s content. sub 31 ; Subtract 31 to switch to the next uppercase letter ("a" -> "B", etc.). fwd 1 ; Advance to cell 1. sub 1 ; Decrement cell 1. jnz ; While cell 1 in non-zero, jump to "rwd 1". ; This loop will print "AaBb...YyZz". rwd 1 ; Retrocede th cell 0, which holds 65 + 26 = 91. add 4 ; Set cell 0 to 95 ("_"). put ; Print its content.  

Comentarii

  • Uau, eram pe punctul de a posta o soluție foarte asemănătoare cu a ta .
  • Mintile deopotrivă se gândesc grozav !
  • @LeakyNun Hm, cam târziu, dar se pare că al tău este cu 3 octeți mai scurt …
  • @EriktheOutgolfer Sesos a fost codificat într-un mod mai puțin eficient. Ambele programe au acum 17 octeți.
  • @Dennis Ah, memoria cache TIO poate fi uneori confuză.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *