Napisz program lub funkcję, która drukuje lub zwraca ciąg znaków alfanumerycznych oraz podkreślenia, w dowolnej kolejności . Aby być precyzyjnym, należy wyprowadzić następujące znaki, i nie więcej :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ 

Podczas drukowania na standardowe wyjście, dozwolony jest opcjonalny końcowy znak nowej linii za wyjściem.

Wbudowane stałe, które zawierają 9 lub więcej z powyższych znaków jest niedozwolonych.


Najkrótszy kod w bajtach wygrywa.

To jest bardzo proste wyzwanie, które, jak sądzę, wygeneruje kilka interesujących odpowiedzi.


Rankingi

Oto fragment stosu, który generuje zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.

Aby upewnić się, że Twoja odpowiedź pojawi się, rozpocznij odpowiedź od nagłówka, korzystając z następującego szablonu Markdown:

# Language Name, N bytes 

gdzie N to rozmiar Twojego zgłoszenia. Jeśli poprawisz swój wynik, możesz zachować stare wyniki w nagłówku, przekreślając je. Na przykład:

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

Jeśli chcesz umieścić wiele liczb w swoim nagłówku (np. Ponieważ Twój wynik jest sumą dwóch plików lub chcesz wyświetlić interpreter osobno oznaczać kary), upewnij się, że rzeczywisty wynik to ostatnia liczba w nagłówku:

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

Możesz także ustawić nazwa języka link, który następnie pojawi się we fragmencie tabeli wyników:

# [><>](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> 

Komentarze

Odpowiedź

Convex, 9 bajtów

Nowa metoda! Zrozumiałem również, że jest to prawie to samo, co odpowiedź Luisa „, ale w wypukłym, ale wymyśliłem to niezależnie.

"{,®\W"Oò 

Wypróbuj online!

Wyjaśnienie:

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

Stare rozwiązanie, 10 bajtów :

A,"[,_¬^"_ 

Wypróbuj online!

Wyjaśnienie:

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

Komentarze

  • @ mbomb007 Tak, jest to odpowiednik kodu CJam A,'[,_el^'_
  • Jakie to kodowanie?
  • @ CᴏɴᴏʀO ' Bʀɪᴇɴ CP-1252 lub Windows-1252

Odpowiedź

Ruby, 26 bajtów

Znaki mogą być drukowane w dowolnej kolejności? Nie pamiętaj, jeśli to zrobię!

Wypróbuj online!

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

Odpowiedź

Perl, 20 bajtów

Wymaga -E bez dodatkowych kosztów .

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

Moja pierwotna odpowiedź (poniżej) była trochę zbyt nudna . Jedyne, co udało mi się wymyślić, to powyższe, to jest dokładnie to samo, ale wygląda trochę bardziej zagmatwane … Jest prawie dokładnie równoważne z poniższym:

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

Podoba mi się @ msh210 „s sugestie w komentarzach, ale są one trochę za długie!

Komentarze

  • +1. Nieco ciekawsze, ale dłuższe jest , wszystkie 27 bajtów: say grep/\w/,map chr,1..122 || say map{chr=~/\w/;$&}1..122 || say map{chr=~s/\W//r}1..122
  • @ msh210 Nadal można ' t zmniejszyć to bardziej … Jednak udało mi się osiągnąć 25: say chr=~/\w/g for 1..255

Odpowiedź

Cheddar, 31 27 bajtów

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

To dobrze pokazuje operator @"

Brak ukończenia, ponieważ w końcu udało mi się naprawić @". Błąd polegał na tym generował zakres Cheddar, a nie zakres JS, więc nie mógł działać poprawnie


Wyjaśnienie

Operatorem @" był zaprojektowany przez @ CᴏɴᴏʀO „Bʀɪᴇɴ, a to, co robi, to generowanie ciągu od LHS do RHS.Gdy jest używany jako operator jednoargumentowy, zwraca znak w podanym punkcie kodowym (np. Python „s chr)

Ungolfed

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

Odpowiedź

brainfuck, 58 bajtów

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

Wypróbuj online .

Inicjuje taśmę na 3 · 2 n i działa od tego miejsca.

 +++[[<+>->++<]>] 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 | ^  

Odpowiedź

JavaScript (ES6), 62 bajty

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

Zwraca 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, a więc tylko 6 bajtów krócej niż funkcja zwracająca literał ciągu. Tak, jest do bani.

Komentarze

  • Możesz spróbować znaleźć ciąg, dla którego btoa zwraca wymagane wyjście.
  • @gcampbell 60! Wyszukiwanie ciągów (60 silni) może zająć trochę czasu …
  • Możesz po prostu użyć atob.
  • @gcampbell Muszę jakoś wykluczyć nieprzedstawialne ciągi.
  • @gcampbell Okazuje się, że wersja btoa i tak zajmuje 62 bajty: 45 do zakodowania 60 znaków alfanumerycznych, 3 niezakodowanych znaków (w tym _) i 14 dla _=>atob("")+"".

Odpowiedź

Haskell, 38 bytes

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

Nie ma tu nic do wyjaśnienia.

Komentarze

  • pytanie: Jaka jest ' różnica między : a ++?
  • @Downgoat: ++ pobiera dwa ciągi i łączy je. : pobiera znak i ciąg znaków i umieszcza znak na początku ciągu. "_"++['a'..'z']... również działa, ale jest o jeden bajt dłuższy.

Odpowiedź

PowerShell v3 +, 35 33 bajty

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

Konstruuje dynamiczną tablicę 1..127 , rzutuje go jako tablicę char. Jest to „przekazywane do operatora -match pracującego na wyrażeniu regularnym \w, który zwróci wszystkie pasujące elementy (tj. Dokładnie alfanumeryczne i podkreślone ). Hermetyzujemy te elementy tablicy w -join, aby połączyć je w jeden ciąg. Pozostaje on w potoku, a dane wyjściowe są niejawne.

Komentarze

  • Hej, to ' to niesprawiedliwe. Moje własne rozwiązanie jest identyczne, z wyjątkiem tego, że zacząłem od 0
  • @Joey Muszę iść szybko. : D
  • Wydaje mi się, że zwłaszcza w przypadku banalnych i oczywistych rozwiązań 😉

Odpowiedź

V, 27 bajtów

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

Wypróbuj online!

Ta odpowiedź jest strasznie zagmatwana. Wyjaśnienie prześlę później.

Hexdump:

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

Wyjaśnienie:

Czytelny:

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. 

Komentarze

  • : D: D: D Cheddar ma dobrą znajomość gry w golfa!

Odpowiedź

J, 30 29 28 bajtów

Zapisano bajt dzięki randomra!

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

Wynik:

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

Wyjaśnienie

Nie przedstawię wyjaśnienia per se , ale przedstawię wyniki pośrednie.

 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 

Odpowiedź

Haskell, 31 bajtów

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

Wyrażenie zip "aA0_" "zZ9_" podaje listę punktów końcowych [("a","z"),("A","Z"),("0","9"),("_","_")]. do zapisuje każdy (x,y) do włącznie \(x,y)->[x..y] i łączy wynik s. Podziękowania dla Andersa Kaseorg za dwa bajty z do zamiast >>=.

Porównaj z alternatywami:

 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 __"  

Komentarze

  • do zapisuje dwa bajty: do(x,y)<-zip"aA0_""zZ9_";[x..y]

Odpowiedź

C, 50 bajtów

Zadzwoń f() bez żadnych argumentów.

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

Wydruki

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210 

Komentarze

  • isalnum(n)|n==95&&putchar(n)
  • Tam jest ' S UB. Nie przekazałeś ' wymaganych argumentów.
  • @orlp – Użyłeś putc zamiast putchar. putc oczekuje również strumienia do zapisu, co nie zostało ' udane.Sama funkcja działa dobrze (spróbuj całkowicie usunąć swoje putc i to działa).
  • @owacoder Ups!
  • @QPaysTaxes, które ' s źle. If the number of arguments does not equal the number of parameters, the behavior is undefined. 6.5.2.2/6, patrz N1570 .

Odpowiedź

/// , 63 bajty

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ 

Komentarze

  • Jaka jest prawidłowa odpowiedź? Wygląda na to, że ' narusza zasady.
  • @nicael która zasada?
  • " Wbudowane stałe, które zawierają 9 lub więcej powyższych znaków, są niedozwolone. " … Czy brakuje mi czegoś oczywistego, @Leaky?
  • Tak, że to nie ' nie używa żadnych wbudowanych stałych.
  • Ok, ale to jest przynajmniej dziwne. Zdecydowanie OP nie ' nie prosi o skopiowanie i wklejenie sekwencji, która ' nie jest interesująca.

Odpowiedź

Python 3, 58 bajtów

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

Pełny program który drukuje na STDOUT.

Wynik jest następujący: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Jak to działa

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 

Wypróbuj w Ideone

Gdyby dozwolone były stałe łańcuchowe, następująca wielkość miałaby 45 bajtów:

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

Komentarze

  • print('_'+*filter(str.isalnum,map(chr,range(123))))
  • @LeakyNun To generuje błąd składniowy. Myślałem o zrobieniu czegoś podobnego z print('_',*filter(str.isalnum,map(chr,range(123)))), ale to wypisuje spacje oddzielające; OP powiedział w komentarzach, że ' … w danych wyjściowych w ogóle nie są dozwolone spacje '.
  • Python 2 może zapisać jeden bajt w ten sposób: print''.join(filter(str.isalnum,map(chr,range(123)))),'_'

Odpowiedź

Moja pierwsza próba gry w 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+"":"");} 

Wielkie dzięki dla aloisdg, AstroDan, Leaky Nun i Kevin Lau – a nie Kenny za całą pomoc w komentarzach.

Komentarze

  • Witamy w PPCG! Możesz usunąć całą przestrzeń! Zobacz także Wskazówki dotyczące gry w golfa w C # , aby uzyskać kilka wskazówek.
  • Świetnie – zaoszczędziłem 2 bajty więcej. ' naprawdę zaczynam lubić ten kodegolf 🙂
  • AFAIK, klasa \w obejmuje alfanumeryczne i także _, co powinno sprawić, że "\\w" będzie wystarczająco poprawne dla funkcji dopasowania wyrażenia regularnego.
  • Twój kod powinien być funkcją lub pełny program nie jest instrukcją. Użyj również .NetFiddle do udostępnienia demonstracji swojego kodu 🙂
  • " C # isn ' t najlepiej codegolf " Uważam, że C # jest wystarczająco zabawny do kodowania golfa. Uważam, że jest to świetny główny nurt do zabawy. Jeśli jesteś tutaj, aby wygrać, przegrasz. Określ swój cel jako naukę i dobrą zabawę, a zawsze będziesz wygrywać.

Odpowiedz

Czysta bash, 32

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

Ideone .

Odpowiedź

Object Pascal, 85 83 73 bajty

Po prostu zwykły pascal obiektu używający zestawu znaków. Napisanie pełnego programu zamiast procedury pozwala zaoszczędzić 2 bajty. Usunięcie słowa kluczowego programu powoduje zmniejszenie liczby kolejnych 10 bajtów.

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

Komentarze

  • Zawsze byłem i prawdopodobnie będę zawsze być zdezorientowany dokładną klasyfikacją Object Pascal. Turbo / Borland Pascal i FreePascal są z pewnością szczęśliwi bez bezużytecznego słowa kluczowego program.
  • @manatwork Nie ' t wiem o tym. Co dziwne, teraz pascal jest tutaj konkurencyjny …
  • Język, w którym dorastałem. Wiem, że jeszcze nie umarło …
  • @rexkogitans Tak, nauczyłem się tego w szkole, ale ' nie pamiętam niczego z tamtych czasów … ' znowu gram w programowanie

Odpowiedź

bash – 47 37 bajtów

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

Dane wyjściowe w moim systemie to:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 

Dzięki Digital Trauma za pomocne sugestie.

W niektórych systemach możesz użyć ascii zamiast man sh, aby zapisać bajt.

Komentarze

  • man sh|egrep -io _\|\\w|sort -u|tr -d \\n
  • @DigitalTrauma Dziękujemy!Eksperymentowano i odkryto, że \w pasuje do _ i już nie rozróżnia wielkości liter, więc można skrócić jeszcze bardziej.
  • env zamiast man sh powinien działać w większości środowisk. Na moim działa. $ env|egrep -o \\w|sort -u|tr -d \\n – > 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.
  • Tam ' s no J. Mój błąd.

Odpowiedź

PHP, 40 bajtów

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

Demo online .

Komentarze

  • +1 za doskonałość. Uwaga boczna: PHP 7.2 wyświetla ostrzeżenia, wspominając, że przyszłe wersje będą generować błędy dla niezdefiniowanych stałych. 🙁

Odpowiedź

Retina , 30 19 16 15 12 bajtów

Zmodyfikowałem próba oryginalnego alfabetu dla najnowszej wersji. Każdy znak jest drukowany w pętli.

Pierwsza linia jest pusta.

 ; +T\`;w`w_

Wypróbuj online

Wyjście:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

Dziękuję Leaky Nun za grę w golfa 4 bajty od mojej ostatniej próby.

Komentarze

  • I ' d powiedz, że w liczy się jako stała zawierająca 9 lub więcej wymaganych znaków. Ty ' ll prawdopodobnie trzeba będzie rozwinąć prawą stronę i zamienić w po lewej na o. Chociaż możesz a zapisz bajt, używając EO zamiast d, ponieważ każdy z nich zawiera tylko 5 znaków.
  • @ mbomb007 w wewnątrz etapu transliteracji nie ma nic wspólnego z wyrażeniem regularnym. Jest to ' skrót, który rozwija się do listy wymaganych 63 znaków. Przynajmniej ' d spytam orlp konkretnie o ten przypadek, ponieważ ' jest zupełnie inny niż \w w wyrażeniu regularnym.

Odpowiedź

MATL , 11 bajtów

7W:"\W"[]YX 

Wypróbuj 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 

Komentarze

  • 2 bajty krótsze: 8W:'\w'XX
  • @DrGreenEggsandIronMan Dzięki! Ale myślę, że znaki nowej linii nie są dozwolone jako separatory. Wyzwanie mówi, że " to ciąg znaków alfanumerycznych plus podkreślenie … i koniec z "
  • Więc dlaczego czy nie ' nie możesz wykonać 8W:'\w'XX!, co próbowałem, ale nie ' nie działa
  • @DrGreenEggsandIronMan Bardzo dobre pytanie! Pozwól, że odpowiem na czacie , abym mógł użyć trochę więcej znaków

Odpowiedź

Brachylog , 25 bajtów

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

Spowoduje to wyświetlenie następujących elementów w STDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 

Wyjaśnienie

"_"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 

Odpowiedź

Dyalog APL , 18 bajtów

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

drukuje:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz 

Komentarze

  • @user Wbudowane stałe, które zawierają 9 lub więcej powyższych znaków, są niedozwolone.

Odpowiedź

Pyth, 13 12 bajtów

s:#"\w"0rk\| 

Wypróbuj online!

Znajduje wszystkie znaki od U + 0000 do U + 007B pasujące do wyrażenia regularnego /\w/.

O utputs 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.

podejście alternatywne: 15 bajtów

ssrMc4"0:A[a{_` 

Wypróbuj online!

zasadniczo generuje wymagane półzakresy: 0-:, A-[, a-{, _-`.

Odpowiedź

CJam , 15 14 11 bajtów

4 bajty mniej dzięki @FryAmTheEggman i @Dennis!

A,"[,_el^"_ 

Wypróbuj 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 

Odpowiedź

Brainfuck, 89 bajtów

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

Wypróbuj tutaj

Szczegóły:

+++++++++[>+++++>+<<-]>+++. 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 

Gdybym mógł skomentować, musiałbym poprawić odpowiedzi innych. Ale ponieważ nie mogę, mogę równie dobrze opublikować własne. Kiedy zacząłem pisać ten tekst, najniższy BF miał 96 długości.

Odpowiedź

F #, 50 59 bajtów

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

Dane wyjściowe:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 

Edycja: pominięto cyfry za pierwszym razem

Edit2, zainspirowany rozwiązaniem Haskella ten fragment F # to 67 bajtów.

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

Wyjście:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ 

Odpowiedź

Hexagony, 33

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

Rozwinięty:

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

Wyjście:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_ 

Wypróbuj online!

Zauważ, że w pierwszym bajcie programu znajduje się niedrukowalny znak 0x1A. To również sprawia, że pierwszy wiersz rozwiniętego sześciokąta wygląda trochę na wyłączony. Podziękowania dla Martina za pokazując mi tę sztuczkę, a także sugerując algorytm drukowania t he alfabet!

Spowoduje to wydrukowanie alfabetu przez zapisanie a i A na dwóch krawędziach sześciokąta i liczby 26 na krawędzi sześciokąta stykającego się z połączeniem między literami. Wygląda to mniej więcej tak:

A \ / a | 26 

Następnie wchodzi w pętle, które wypisują litery, a następnie je zwiększają, a następnie zmniejszają liczbę. Po jednej iteracji otrzymalibyśmy:

B \ / b | 25 

I tak dalej. Liniowy kod inicjalizacji to: 0x1A " A } a. Liniowy kod pętli poza zmianami przepływu sterowania to: ; ) " ; ) { ( " =.

Gdy licznik osiągnie zero, podążamy inną ścieżką, aby wydrukować liczby i podkreślać. Zapisany liniowo jest to: x 3 5 6 8 4 7 9 ! ; { @. Spowoduje to zastąpienie bieżącej wartości krawędzi pamięci liczbą 1203568479 (zwróć uwagę, że kod ASCII x to 120), który zawiera wszystkie cyfry dziesiętne. Drukujemy tę liczbę, a następnie używamy zgrabnej funkcji Hexagony: wypisujemy liczbę mod 256 jako znak ASCII. Tak się składa, że to 95 lub podkreślenie.

Odpowiedź

Brainfuck, 114 103 98 90 76 71 bajtów

Kolejny trywialny (teraz nie -trywialne) rozwiązanie, ale tym razem jest BF!

Zapisano 14 (!) bajtów dzięki @primo.

Zapisano 4 dodatkowe bajty dzięki sugestii @primo, aby wygenerować zakres do tyłu i zapisałem kolejny, zwiększając przed drukowaniem dla małych liter.

Nowy (recurrence 4, 71):

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

Stare (wartości, 114):

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

Stare (recurrence 1, 103):

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

Stare (recurrence 2, 90):

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

Stare (recurrence 3, 76):

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

Zakłada 8-bitowe zawijanie komórek i zawijanie pamięci. Użyłem Wypróbuj online .

Wydrukuj wszystko _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

Najpierw ta część

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

inicjalizuje taśmę tymi wartości

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

To działa, ponieważ relacja powtarzania, którą wymodelowałem, to w zasadzie f(x) = 7 * (3 * x + 1), wstecz. Zobacz @primo „s Hello, World! Answer , aby wyjaśnić, czym jest relacja powtarzania.

W takim razie jest to dość proste zmienić te wartości na przydatne. (i wypisz podkreślenie)

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

Następnie proste pętle używają wartości do wypisania pozostałych znaków. Oszczędzam 1 bajt, mając przyrost przed drukowaniem.

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

Naprawdę muszę znaleźć krótszą generację sekwencji.

Znalazłem relację powtarzania, która wydaje się działać dobrze, ale może istnieć krótsza relacja z mniejszą liczbą polowań i dziobów.

Użyłem kalkulatora regresji liniowej aby znaleźć najkrótszą z możliwych liniową relację rekurencji, więc prawdopodobnie powinienem znaleźć inną formułę, jeśli chcę ją poprawić.

@primo naprawdę bardzo poprawiło relację powtarzania, dzięki.

Komentarze

  • A co z konstrukcją wsteczną? +[--[<+++++++>->+<]>-]
  • @primo Wow! Jak to działa?
  • 3 jest nierówny, więc zapętli się pełne 256 razy. Kończąc na >-], możesz być pewien, że końcowym terminem będzie 1 (x7). Właściwie powinieneś prawdopodobnie zacząć od -, kończy się to znacznie szybciej.

Odpowiedź

Sesos , 17 bajty

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

Wyjście

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_ 

Wypróbuj online! Sprawdź Debuguj , aby zobaczyć wygenerowany kod binarny.

Jak to działa

Powyższy plik binarny został wygenerowany składając następujący kod 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.  

Komentarze

  • Wow, właśnie zamierzałem opublikować rozwiązanie bardzo podobne do twojego .
  • Podobnie myślą wspaniale !
  • @LeakyNun Hm, trochę późno, ale wygląda na to, że twój jest o 3 bajty krótszy …
  • @EriktheOutgolfer Sesos był kiedyś kodowany w mniej wydajny sposób. Oba programy mają teraz 17 bajtów.
  • @Dennis Ach, cóż, pamięć podręczna TIO może czasami być myląca.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *