Schrijf een programma of functie die een reeks alfanumerieke tekens plus onderstrepingsteken afdrukt of retourneert, in willekeurige volgorde . Om precies te zijn, de volgende tekens moeten worden uitgevoerd, en niet meer :
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
Wanneer u naar stdout afdrukt, is een optionele nieuwe regel na uw uitvoer toegestaan.
Ingebouwde constanten die 9 bevatten of meer van de bovenstaande karakters zijn niet toegestaan.
De kortste code in bytes wint.
Dit is een zeer eenvoudige uitdaging, die naar mijn mening toch enkele interessante antwoorden zal opleveren.
Leaderboards
Hier is een Stack-fragment om zowel een regulier scorebord als een overzicht te genereren van winnaars per taal.
Om ervoor te zorgen dat uw antwoord wordt weergegeven, begint u uw antwoord met een kop, met behulp van het volgende Markdown-sjabloon:
# Language Name, N bytes
waarbij N
de grootte is van uw inzending. Als u uw score verbetert, kunt u oude scores in de kop houden door ze door te halen. Bijvoorbeeld:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Als u daar meerdere getallen in uw koptekst wilt opnemen (bijvoorbeeld omdat uw score de som is van twee bestanden of u wilt een lijst met tolk markeer sancties afzonderlijk), zorg ervoor dat de werkelijke score het laatste nummer in de koptekst is:
# Perl, 43 + 2 (-p flag) = 45 bytes
Je kunt ook de taal geef een link een naam die vervolgens in het scorebordfragment verschijnt:
# [><>](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>
Opmerkingen
- Reacties zijn niet bedoeld voor uitgebreide discussie; deze conversatie is verplaatst naar chat .
Antwoord
Convex, 9 bytes
Nieuwe methode! Ik realiseerde me ook dat het vrijwel precies hetzelfde is als Luis “antwoord, maar dan in Convex, maar ik bedacht dit onafhankelijk.
"{,®\W"Oò
Uitleg:
"{, Array of chars from NUL to "z ®\W" Regex to match non-word characters Oò Replace all matches with emtpy string
Oude oplossing, 10 bytes :
A,"[,_¬^"_
Uitleg:
A, 0-9 "[,_¬^ A-Za-z "_ _
Reacties
Antwoord
Ruby, 26 bytes
Tekens kunnen in willekeurige volgorde worden afgedrukt? vind het erg als ik dat doe!
$><<(?0..?z).grep(/\w/)*""
Antwoord
Perl, 20 bytes
-E
vereist zonder extra kosten .
say+a.._,A.._,_..9,_
Dus mijn oorspronkelijke antwoord (hieronder) was een beetje te saai . Het enige dat ik heb kunnen bedenken is het bovenstaande, dat is precies hetzelfde, maar ziet er wat verwarrend uit … Het is vrijwel precies gelijk aan het onderstaande:
say a..z,A..Z,0..9,_
Ik vind @ msh210 “s leuk suggesties in de reacties, maar ze “zijn gewoon iets te lang!
Reacties
- +1. Iets interessanter, maar langer is een van deze , alle 27 bytes:
say grep/\w/,map chr,1..122
||say map{chr=~/\w/;$&}1..122
||say map{chr=~s/\W//r}1..122
- @ msh210 Kan nog steeds ' dit nog meer verkleinen … Beheerde een 25 echter:
say chr=~/\w/g for 1..255
…
Antwoord
Cheddar, 31 27 bytes
->97@"123+65@"91+48@"58+"_"
Dit toont de @"
operator goed
Voltooit niet omdat ik eindelijk begon met het repareren van de @"
operator. De bug was dat het genereerde een Cheddar-bereik, geen JS-bereik, dus het kon “niet goed werken
Uitleg
De @"
operator was ontworpen door @ CᴏɴᴏʀO “Bʀɪᴇɴ, en wat het doet is een reeks reeksen genereren van LHS tot RHS.Bij gebruik als een unaire operator, retourneert het het teken op het gegeven codepunt (zoals python “s chr
)
Ungolfed
-> 97 @" 123 + 65 @" 91 + 48 @" 58 + "_"
Antwoord
hersenkraker, 58 bytes
+++[[<+>->++<]>]<<[-<->]<<-.+<<++[->>+.>+.<<<]<--[->>.+<<]
Initialiseert de tape naar 3 · 2 n , en werkt vanaf daar.
+++[[<+>->++<]>] 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 | ^
Antwoord
JavaScript (ES6), 62 bytes
_=>String.fromCharCode(...Array(123).keys()).replace(/\W/g,"")
Geeft als resultaat 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
, dus slechts 6 bytes korter dan een functie die de letterlijke tekenreeks retourneert. Ja, het is stom.
Opmerkingen
- Je zou kunnen proberen een string te vinden waarvoor
btoa
geeft de vereiste uitvoer terug. - @gcampbell 60! (60 faculteit) strings kunnen even zoeken …
- Je kunt gewoon
atob
gebruiken. - @gcampbell Ik moet sluit op de een of andere manier niet-representatieve strings uit.
- @gcampbell Het blijkt dat de btoa-versie toch 62 bytes nodig heeft: 45 om 60 alfanumerieke tekens te coderen, 3 niet-gecodeerde tekens (inclusief
_
) en 14 voor_=>atob("")+""
.
Antwoord
Haskell, 38 bytes
"_":["a".."z"]++["A".."Z"]++["0".."9"]
Niets om hier uit te leggen.
Opmerkingen
- vraag: wat is ' is het verschil tussen
:
en++
? - @Downgoat:
++
neemt twee strings en voegt ze samen.:
neemt een teken en een tekenreeks en plaatst het teken vóór de tekenreeks."_"++['a'..'z']...
werkt ook, maar is één byte langer.
Antwoord
PowerShell v3 +, 35 33 bytes
-join([char[]](1..127)-match"\w")
Construeert een dynamische array 1..127
, cast het als een char
array. Dat wordt toegevoerd aan de -match
operator die werkt aan de regex \w
, die alle elementen retourneert die overeenkomen (dwz exact alfanumeriek en onderstrepingsteken ). We kapselen die array-elementen in een -join
om het te bundelen als één string. Dat blijft over op de pijplijn en de uitvoer is impliciet.
Opmerkingen
- Hé, dat ' is niet eerlijk. Mijn eigen oplossing is identiek, behalve dat ik begon bij
0
… - @Joey Moet snel gaan. : D
- Vooral voor de triviale en voor de hand liggende oplossingen, denk ik 😉
Antwoord
V, 27 bytes
i1122ñYpñvHgJ|éidd@"Í×
Dit antwoord is vreselijk ingewikkeld. Ik zal later een uitleg plaatsen.
Hexdump:
00000000: 6916 1631 1b31 3232 f159 7001 f176 4867 i..1.122.Yp..vHg 00000010: 4a7c e969 6464 4022 1bcd d7 J|.idd@"...
Uitleg:
Leesbaar:
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.
Reacties
- : D: D: D Cheddar is verbonden met een golftang!
Antwoord
J, 30 29 28 bytes
Een byte opgeslagen dankzij randomra!
~.u:95,;48 65 97+i."*10,,~26
Uitvoer:
~.u:95,;48 65 97+i."*10,,~26 _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Uitleg
Ik zal per se geen uitleg geven, maar zal tussentijdse resultaten geven.
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
Answer
Haskell, 31 bytes
do(x,y)<-zip"aA0_""zZ9_";[x..y]
De uitdrukking zip "aA0_" "zZ9_"
geeft de lijst met eindpunten [("a","z"),("A","Z"),("0","9"),("_","_")]
. De do
-notatie neemt elke (x,y)
naar de inclusief \(x,y)->[x..y]
en voegt het resultaat samen s. Met dank aan Anders Kaseorg voor twee bytes met do
in plaats van >>=
.
Vergelijk met alternatieven:
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 __"
Reacties
-
do
notatie bewaart twee bytes:do(x,y)<-zip"aA0_""zZ9_";[x..y]
Antwoord
C, 50 bytes
Bel f()
zonder argumenten.
f(n){for(n=128;--n;)isalnum(n)|n==95&&putchar(n);}
Afdrukken
zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210
Reacties
-
isalnum(n)|n==95&&putchar(n)
- Daar ' s UB daar. Je hebt ' niet de vereiste argumenten doorgegeven.
- @orlp – Je hebt
putc
gebruikt in plaats vanputchar
.putc
verwacht ook een stream om naar te schrijven, wat je ' niet hebt doorgegeven.De functie zelf werkt prima (probeer jeputc
helemaal te verwijderen, en het werkt). - @owacoder Oeps!
- @QPaysTaxes die ' s fout.
If the number of arguments does not equal the number of parameters, the behavior is undefined.
6.5.2.2/6, zie N1570 .
Antwoord
/// , 63 bytes
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
Reacties
- Hoe is dit het geldige antwoord? Het lijkt erop dat ' de regels overtreedt.
- @nicael welke regel?
- " Ingebouwde constanten die 9 of meer van de bovenstaande tekens bevatten, zijn niet toegestaan. " … Mis ik iets voor de hand liggend, @Leaky?
- Ja, dat dit ' geen ingebouwde constanten gebruikte.
- Ok, maar dit is in ieder geval raar. OP vraagt beslist niet ' om de reeks te kopiëren en plakken, dat ' niet interessant is.
Answer
Python 3, 58 bytes
print("_",*filter(str.isalnum,map(chr,range(123))),sep="")
Een volledig programma dat wordt afgedrukt naar STDOUT.
De uitvoer is: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Hoe het werkt
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
Als stringconstanten waren toegestaan, zou het volgende 45 bytes zijn geweest:
from string import* print("_"+printable[:62])
Opmerkingen
-
print('_'+*filter(str.isalnum,map(chr,range(123))))
- @LeakyNun Dat geeft een syntaxisfout. Ik dacht erover om iets soortgelijks te doen met
print('_',*filter(str.isalnum,map(chr,range(123))))
, maar dat drukt scheidingsspaties af; het OP zei in de commentaren dat ' … helemaal geen spaties in de uitvoer zijn toegestaan '. - Python 2 kan één byte besparen met deze benadering:
print''.join(filter(str.isalnum,map(chr,range(123)))),'_'
Answer
Mijn eerste poging tot codegolf!
C #, 168 152 150 147 130 127 117 116 115 109 106 bytes
for(var a="0";a<"~";a++){Console.Write(System.Text.RegularExpressions.Regex.IsMatch(a+"","\\w")?a+"":"");}
Heel erg bedankt aan aloisdg, AstroDan, Leaky Nun en Kevin Lau – niet Kenny voor alle hulp in reacties.
Opmerkingen
- Welkom bij PPCG! Voel je vrij om alle ruimte te verwijderen! Bekijk ook Tips voor golfen in C # voor enkele tips.
- Geweldig – heeft me 2 bytes meer bespaard. Ik ' begin deze codegolf echt leuk te vinden 🙂
- AFAIK, de
\w
regex-klasse omvat de alfanumerieke en ook_
, wat"\\w"
voldoende geldig zou moeten maken voor uw regex-matchfunctie. - Uw code zou een be-functie moeten zijn of een volledig programma, geen verklaring. Gebruik .NetFiddle ook om een demonstratie van uw code te delen 🙂
- " C # isn ' t het beste om codegolf " Ik vind C # leuk genoeg om golf te coderen. Ik denk dat het een geweldige reguliere taal is om mee te spelen. Als je hier bent om te winnen, verlies je. Definieer uw doel als leren en plezier hebben en u zult altijd winnen.
Antwoord
Antwoord
Object Pascal, 85 83 73 bytes
Gewoon object pascal met behulp van een set tekens. Het schrijven van een volledig programma in plaats van een procedure scheert 2 bytes af. Door het programmazoekwoord te verwijderen, scheert u 10 bytes meer.
var c:char;begin for c in["a".."z","A".."Z","0".."9","_"]do write(c);end.
Reacties
- Ik was en zal dat waarschijnlijk ook doen wees altijd in de war door de exacte classificatie van Object Pascal. Turbo / Borland Pascal en FreePascal zijn zeker tevreden zonder het nutteloze
program
sleutelwoord. - @manatwork Ik heb ' t weet dat. Vreemd genoeg maakt het pascal nu competitief hier …
- De taal waarmee ik ben opgegroeid. Ik weet dat het nog niet dood is …
- @rexkogitans Ja, ik heb het op school geleerd, maar ' kan me niets herinneren van toen … Ik ' speel nu weer met wat programmeren
Antwoord
bash – 47 37 bytes
man sh|egrep -o \\w|sort -u|tr -d \\n
Uitvoer op mijn systeem is:
_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
Met dank aan Digital Trauma voor nuttige suggesties.
Op sommige systemen kunt u ascii
gebruiken in plaats van man sh
om een byte op te slaan.
Reacties
-
man sh|egrep -io _\|\\w|sort -u|tr -d \\n
- @DigitalTrauma Bedankt!Geëxperimenteerd en gevonden
\w
komt overeen met_
en is al hoofdletterongevoelig, dus kan nog meer bekorten. -
env
in plaats vanman sh
zou in de meeste omgevingen moeten werken. Het doet het op de mijne.$ env|egrep -o \\w|sort -u|tr -d \\n
– >0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
. - Daar ' s nee
J
. Mijn fout.
Antwoord
PHP, 40 bytes
_0<?for(;$a++^9?$a^q:$a=A;)echo" $a"|$a;
Opmerkingen
- +1 voor uitmuntendheid. Kanttekening: PHP 7.2 geeft waarschuwingen die vermelden dat toekomstige versies fouten zullen genereren voor ongedefinieerde constanten. 🙁
Antwoord
Retina , 30 19 16 15 12 bytes
Ik heb mijn oorspronkelijke alfabetpoging voor deze nieuwste versie. Elk teken wordt in een lus afgedrukt.
De eerste regel is leeg.
; +T\`;w`w_
Uitvoer:
_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Met dank aan Leaky Nun voor het golfen van 4 bytes van mijn laatste poging.
Reacties
- I ' d zeg dat
w
telt als een constante die 9 of meer van de vereiste tekens bevat. U ' ll moet waarschijnlijk de rechterkant uitvouwen en dew
aan de linkerkant vervangen dooro
. en sla een byte op doorEO
te gebruiken in plaats vand
aangezien ze elk slechts 5 karakters bevatten. - @ mbomb007
w
binnen de transliteratiefase heeft niets te maken met regex. Het ' is een afkorting die wordt uitgebreid tot een lijst met de vereiste 63 tekens. Ik ' zou orlp specifiek naar deze zaak vragen, aangezien het ' heel anders is dan het gebruik van\w
in een reguliere expressie.
Antwoord
MATL , 11 bytes
7W:"\W"[]YX
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
Reacties
- 2 bytes korter:
8W:'\w'XX
- @DrGreenEggsandIronMan Bedankt! Maar ik denk dat nieuwe regels niet zijn toegestaan als scheidingstekens. De uitdaging zegt " een reeks alfanumerieke tekens plus onderstrepingsteken … en niet meer "
- Dus waarom kon niet ' t je doet
8W:'\w'XX!
wat ik heb geprobeerd maar niet ' werkt - @DrGreenEggsandIronMan Zeer goede vraag! Laat me je beantwoorden in de chat zodat ik wat meer tekens kan gebruiken
Antwoord
Brachylog , 25 bytes
"_"w9yrcw"A":"Z"ycL@l:Lcw
Dit drukt het volgende af naar STDOUT
:
_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
Uitleg
"_"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
Antwoord
Dyalog APL , 18 bytes
∊"\w"⎕S"&"⎕UCS⍳255
afdrukken:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
Opmerkingen
- @user Ingebouwde constanten die 9 of meer van de bovenstaande tekens bevatten, zijn niet toegestaan.
Antwoord
Pyth, 13 12 bytes
s:#"\w"0rk\|
Vindt alle tekens in U + 0000 tot U + 007B die overeenkomen met de regex /\w/
.
O utputs 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
.
alternatieve benadering: 15 bytes
ssrMc4"0:A[a{_`
genereert in feite de vereiste half-inclusieve bereiken: 0-:, A-[, a-{, _-`
.
Antwoord
CJam , 15 14 11 bytes
4 bytes korting dankzij @FryAmTheEggman en @Dennis!
A,"[,_el^"_
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
Antwoord
Brainfuck, 89 bytes
+++++++++[>+++++>+<<-]>+++.>[<+.>-]<+++++++>>+++++++++++++[<+<+.+.>>-]<<+++++.+>[<+.+.>-]
Details:
+++++++++[>+++++>+<<-]>+++. 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
Als ik had kunnen reageren, zou ik de antwoorden van anderen moeten verbeteren. Maar aangezien ik het niet kan, kan ik net zo goed mijn eigen posten. Toen ik dit begon te schrijven, was de laagste BF 96 lang.
Antwoord
F #, 50 59 bytes
Seq.iter(printf"%c"<<char)(95::[48..57]@[65..90]@[97..122])
Uitvoer:
_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Bewerken: de eerste keer de cijfers gemist
Bewerken2, geïnspireerd door deze Haskell-oplossing dit F # -fragment is 67 bytes.
Seq.zip"aA0_""zZ9_"|>Seq.iter(fun(x,y)->Seq.iter(printf"%c")[x..y])
Uitvoer:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
Antwoord
Hexagony, 33
"A}_8_47<=">({a/[email protected]!\356);");
Uitgebreid:
" A } _ 8 _ 4 7 < = " > ( { a / _ x . @ . 9 ! \ 3 5 6 ) ; " ) ; . . . .
Uitvoer:
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_
Merk op dat er een niet-afdrukbaar teken 0x1A
is als de eerste byte van het programma. Hierdoor ziet de eerste rij van de uitgevouwen hexagon er ook een beetje uit. Hartelijk dank aan Martin voor laat me deze truc zien, evenals voor het suggereren van het algoritme voor het afdrukken van t het alfabet!
Dit drukt het alfabet af door a
en A
op te slaan op twee randen van een zeshoek en het nummer 26 op de rand van de zeshoek die de verbinding tussen de letters raakt. Dit ziet er ongeveer zo uit:
A \ / a | 26
Vervolgens gaat het een lus binnen die de letters afdrukt en ze vervolgens verhoogt en vervolgens het aantal verlaagt. Na één iteratie zouden we hebben:
B \ / b | 25
Enzovoort. De lineaire code voor de initialisatie is: 0x1A " A } a
. De lineaire code voor de lussen buiten de controlestroomwijzigingen is: ; ) " ; ) { ( " =
.
Zodra de teller nul bereikt, volgen we een ander pad om de getallen af te drukken en een laag streepje. Lineair uitgeschreven is dit: x 3 5 6 8 4 7 9 ! ; { @
. Dit vervangt de huidige waarde van de geheugenrand door het nummer 1203568479 (merk op dat de ASCII-code van x
“120 is), die alle decimale cijfers bevat. We printen dit nummer uit en dan gebruiken we een handige feature van Hexagony: we printen het nummer mod 256 als een ASCII-teken. Dit is toevallig 95 of een onderstrepingsteken.
Antwoord
Brainfuck, 114 103 98 90 76 71 bytes
Nog een triviaal (nu niet -trivial) oplossing, maar deze keer is het BF!
14 (!) bytes bespaard dankzij @primo.
4 extra bytes bespaard dankzij @primos suggestie om de bereik achteruit, en ik heb een ander opgeslagen door te verhogen voordat ik afdrukte voor de kleine letters.
Nieuw (herhaling 4, 71):
+[--[<+++++++>->+<]>-]<<+++<--<-<-----<++++.+>>>[-<<.+<+.>>>]>[-<<.+>>]
Oud (waarden, 114):
-[----->+<]>--->++++++++++>--[----->+<]>-------.++>----[---->+<]>++>++++[->++++++<]>++[-<<.+<<.+>>>>]<<<<<<[-<.+>]
Oud (herhaling 1, 103):
++++++++++[[<+>->+<]>+++++++++++++++]<<[<]>>+>++++++++>>----->>-----.++<<<<<[->>>.+>>.+<<<<<]<[->>.+<<]
Oud (herhaling 2, 90):
+++++++[[<+>->+<]>>+++[-<+++++++>]<]<<[<]>+++>-->->----->++++.++<<<[->>.+>.+<<<]<[->>.+<<]
Oud (herhaling 3, 76):
+[[<+++++++>->+<]>+++]<<[<]>+++>-->->----->++++.++<<<[->>.+>.+<<<]<[->>.+<<]
Gaat uit van 8 bit inpakcellen en inpakgeheugen. Ik gebruikte Probeer het online .
Alles wordt afgedrukt _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789
Allereerst initialiseert dit deel
+[--[<+++++++>->+<]>-]<<
de tape met deze waarden
[91, 70, 49, 21, 7] ^
Dit werkt omdat de herhalingsrelatie die ik heb gemodelleerd in feite f(x) = 7 * (3 * x + 1)
is, achteruit. Zie @primo “s Hallo, Wereld! Antwoord voor een uitleg van wat een herhalingsrelatie is.
Dan is het vrij eenvoudig om deze waarden in bruikbare waarden te veranderen. (en druk het onderstrepingsteken af)
Code: +++<--<-<-----<++++.+ Tape: [96, 65, 48, 26, 10] ^
Vervolgens gebruiken de eenvoudige lussen de waarden om de rest van de tekens af te drukken. Ik bespaar 1 byte door een increment voor de afdruk te plaatsen.
>>>[-<<.+<+.>>>]>[-<<.+>>]
Ik moet echt een kortere reeksgeneratie vinden.
Ik heb een herhalingsrelatie gevonden die goed lijkt te werken, maar er kan een kortere zijn met minder jagen en pikken.
Ik heb een lineaire regressiecalculator gebruikt om te vinden wat de kortst mogelijke lineaire herhalingsrelatie zou moeten zijn, dus ik zou waarschijnlijk een andere formule moeten vinden als ik wil verbeteren.
@primo heeft de herhalingsrelatie echt enorm verbeterd, bedankt.
Opmerkingen
- Hoe zit het met een achterwaartse constructie?
+[--[<+++++++>->+<]>-]
- @primo Wauw! Hoe werkt dat?
- 3 is ongelijk, dus het zal 256 keer herhalen. Door te eindigen met
>-]
, weet je zeker dat de laatste term 1 (x7) zal zijn. Eigenlijk zou je waarschijnlijk moeten beginnen met-
, het eindigt veel sneller.
Antwoord
Sesos , 17 bytes
00000000: a854be 2cbc9e 71d597 14bc56 1ad99e 713b .T.,..q....V...q;
Uitvoer
0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_
Probeer het online! Controleer Debug om de gegenereerde binaire code te zien.
Hoe het werkt
Het bovenstaande binaire bestand is gegenereerd door de volgende SASM-code samen te stellen.
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.
Reacties
- Wauw, ik stond op het punt om een oplossing te posten die erg lijkt op die van jou .
- Gelijke geesten vinden het geweldig !
- @LeakyNun Hm, een beetje laat, maar het lijkt erop dat die van jou 3 bytes korter is …
- @EriktheOutgolfer Sesos werden vroeger op een minder efficiënte manier gecodeerd. Beide programmas zijn nu 17 bytes lang.
- @Dennis Ach, de TIO-cache kan soms verwarrend zijn.
A,'[,_el^'_