Cetak semua karakter alfanumerik plus garis bawah


37

Tulis program atau fungsi yang mencetak atau mengembalikan string karakter alfanumerik plus garis bawah, dalam urutan apa pun . Untuk lebih tepatnya, karakter berikut harus di-output, dan tidak lebih :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Saat mencetak ke stdout, opsional membuntuti baris baru setelah output Anda diizinkan.

Konstanta bawaan yang berisi 9 karakter atau lebih di atas tidak diizinkan.


Kode terpendek dalam byte menang.

Ini adalah tantangan yang sangat sederhana, yang saya percaya akan menghasilkan beberapa jawaban menarik.


Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


2
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Dennis

Jawaban:


11

Cembung, 9 byte

Metode baru! Juga, saya menyadari bahwa itu persis sama persis dengan jawaban Luis tetapi di Convex, tetapi saya datang dengan ini secara mandiri.

'{,®\W"Oò

Cobalah online!

Penjelasan:

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

Solusi lama, 10 byte:

A,'[,_¬^'_

Cobalah online!

Penjelasan:

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

1
@ mbomb007 Ya itu setara dengan kode A,'[,_el^'_
CJam

Pengodean apa ini?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ CP-1252 atau Windows-1252
GamrCorps


12

Perl, 20 byte

Membutuhkan -Etanpa biaya tambahan.

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

Jadi, jawaban awal saya (di bawah) agak terlalu membosankan. Satu-satunya hal yang berhasil saya buat adalah di atas, itu persis sama, tetapi terlihat sedikit lebih membingungkan ... Ini persis sama persis dengan di bawah ini:

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

Saya suka saran @ msh210 di komentar, tapi itu agak terlalu panjang!


1
+1. Sedikit lebih menarik tetapi lebih lama dari semua ini, semua 27 byte: say grep/\w/,map chr,1..122|| say map{chr=~/\w/;$&}1..122|| say map{chr=~s/\W//r}1..122
msh210

1
@ msh210 Masih tidak bisa menyusutkan ini lagi ... Berhasil mengelola 25: say chr=~/\w/g for 1..255...
Dom Hastings

10

Cheddar, 31 27 byte

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

Ini menampilkan @"operator dengan baik

Tidak menyelesaikan karena saya akhirnya harus memperbaiki @"operator. Bugnya adalah ia menghasilkan rentang Cheddar bukan rentang JS sehingga tidak bisa berfungsi dengan baik


Penjelasan

The @"Operator dirancang oleh @ CᴏɴᴏʀO'Bʀɪᴇɴ, dan apa yang dilakukannya adalah menghasilkan berbagai string dari LHS ke RHS. Ketika digunakan sebagai operator unary, ia mengembalikan char pada titik kode yang diberikan (seperti python chr)

Tidak disatukan

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

10

brainfuck, 58 byte

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

Cobalah online .

Menginisialisasi rekaman ke 3 · 2 n , dan bekerja dari sana.

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

9

JavaScript (ES6), 62 byte

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

Mengembalikan 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, jadi hanya 6 byte lebih pendek dari fungsi yang mengembalikan string literal. Ya, itu menyebalkan.


Anda dapat mencoba menemukan string yang btoamengembalikan output yang diperlukan.
gcampbell

@ gcampbell 60! (60 faktorial) string mungkin perlu waktu untuk mencari ...
Neil

Anda bisa menggunakannya atob.
gcampbell

@ gcampbell saya harus mengecualikan string yang tidak terwakili.
Neil

@ gcampbell Ternyata versi btoa membutuhkan 62 byte: 45 untuk mengkodekan 60 alfanumerik, 3 karakter tanpa kode (termasuk _) dan 14 untuk _=>atob("")+"".
Neil

9

Haskell, 38 byte

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

Tidak ada yang bisa dijelaskan di sini.


2
pertanyaan: apa perbedaan antara :dan ++?
Downgoat

3
@Downgoat: ++mengambil dua string dan menyatukannya. :mengambil char dan string dan menempatkan char di depan string. "_"++['a'..'z']...juga berfungsi, tetapi satu byte lebih panjang.
nimi

8

PowerShell v3 +, 35 33 byte

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

Membangun array dinamis 1..127, melemparkannya sebagai chararray. Itu diumpankan ke -matchoperator yang bekerja pada regex \w, yang akan mengembalikan semua elemen yang cocok (yaitu, persis alfanumerik dan garis bawah). Kami merangkum elemen-elemen array dalam a -joinuntuk mengikatnya sebagai satu string. Yang tersisa pada pipa dan output tersirat.


1
Hei, itu tidak adil. Solusi saya sendiri sama kecuali saya mulai di 0...
Joey

@ Joey Harus pergi cepat. : D
AdmBorkBork

Khusus untuk solusi yang sepele dan jelas, saya kira ;-)
Joey

7

V, 27 byte

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

Cobalah online!

Jawaban ini mengerikan berbelit-belit. Saya akan mengirim penjelasan nanti.

Hexdump:

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

Penjelasan:

Dapat dibaca:

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.

5
: D: D: D Cheddar diikat dengan lang golf!
Downgoat

7

J, 30 29 28 byte

Disimpan satu byte berkat randomra!

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

Keluaran:

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

Penjelasan

Saya tidak akan memberikan penjelasan sendiri , tetapi akan memberikan hasil menengah.

   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

6

Haskell, 31 byte

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

Ekspresi zip "aA0_" "zZ9_"memberikan daftar titik akhir [('a','z'),('A','Z'),('0','9'),('_','_')]. The donotasi mengambil setiap (x,y)ke inklusif yang\(x,y)->[x..y] dan merangkai hasil. Terima kasih kepada Anders Kaseorg untuk dua byte dengan dobukan >>=.

Bandingkan dengan alternatif:

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

2
donotasi menghemat dua byte:do(x,y)<-zip"aA0_""zZ9_";[x..y]
Anders Kaseorg

4

C, 50 byte

Panggil f()tanpa argumen.

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

Cetakan

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210

1
isalnum(n)|n==95&&putchar(n)
orlp

Ada UB di sana. Anda tidak memberikan argumen yang diperlukan.
Ven

@ orlp - Anda putcmalah menggunakannya putchar. putcmengharapkan aliran untuk menulis juga, yang tidak Anda lewati. Fungsi itu sendiri berfungsi dengan baik (coba hapus putcsemuanya, dan berfungsi).
owacoder

@owacoder Ups!
orlp

1
@QPaysTaxes itu salah. If the number of arguments does not equal the number of parameters, the behavior is undefined.6.5.2.2/6, lihat N1570 .
Ven

4

/// , 63 byte

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Bagaimana jawaban yang valid? Sepertinya itu melanggar aturan.
nicael

@nicael yang memerintah?
Leaky Nun

"Konstanta bawaan yang berisi 9 atau lebih karakter di atas tidak diizinkan." ... Apakah saya melewatkan sesuatu yang jelas, @Leaky?
nicael

4
Ya, ini tidak menggunakan konstanta bawaan.
Leaky Nun

Ok, tapi ini aneh setidaknya. Jelas OP tidak meminta Anda untuk menyalin-menempel urutannya, itu tidak menarik.
nicael

4

Python 3, 58 byte

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

Program lengkap yang mencetak ke STDOUT.

Outputnya adalah: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Bagaimana itu bekerja

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

Cobalah di Ideone

Jika konstanta string diizinkan, berikut ini akan menjadi 45 byte:

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

1
print('_'+*filter(str.isalnum,map(chr,range(123))))
Leaky Nun

@ LeakyNun Itu melempar kesalahan sintaksis. Saya berpikir untuk melakukan sesuatu yang serupa print('_',*filter(str.isalnum,map(chr,range(123)))), tetapi itu mencetak ruang yang terpisah; OP mengatakan dalam komentar bahwa '... tidak ada spasi yang diizinkan dalam output sama sekali'.
TheBikingViking

Python 2 dapat menghemat satu byte dengan pendekatan ini:print''.join(filter(str.isalnum,map(chr,range(123)))),'_'
atlasologist

4

Upaya pertama saya di 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+"":"");}

Terima kasih banyak untuk aloisdg, AstroDan, Leaky Nun, dan Kevin Lau - bukan Kenny untuk semua bantuan dalam komentar.


2
Selamat datang di PPCG! Jangan ragu untuk menghapus semua ruang! Juga periksa Tip untuk bermain golf di C # untuk beberapa tips.
aloisdg mengatakan Reinstate Monica

1
Hebat - menyelamatkan saya 2 byte lebih banyak. Saya benar-benar mulai menyukai codegolf ini :)
Daniel

1
AFAIK, \wkelas regex mencakup alfanumerik dan juga _, yang seharusnya "\\w"cukup valid untuk fungsi pencocokan regex Anda.
Value Ink

1
Kode Anda harus berupa fungsi atau program lengkap, bukan pernyataan. Juga gunakan .NetFiddle untuk membagikan demonstrasi kode Anda :)
aloisdg mengatakan Reinstate Monica

2
"C # bukan yang terbaik untuk codegolf" Saya menemukan C # cukup menyenangkan untuk kode golf. Saya pikir ini adalah bahasa utama untuk digunakan. Jika Anda di sini untuk menang, Anda akan kalah. Tetapkan tujuan Anda sebagai pembelajaran dan bersenang-senang dan Anda akan menang setiap saat.
aloisdg mengatakan Reinstate Monica


4

Objek Pascal, 85 83 73 byte

Pascal objek hanya menggunakan seperangkat karakter. Menulis program lengkap alih-alih prosedur mengurangi 2 byte. Menghapus kata kunci program mencukur 10 byte lebih banyak.

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

Saya selalu dan mungkin akan selalu bingung dengan klasifikasi yang tepat dari Object Pascal. Turbo / Borland Pascal dan FreePascal tentu saja senang tanpa programkata kunci yang tidak berguna .
manatwork

@Manatwork saya tidak tahu itu. Anehnya sekarang membuat pascal kompetitif di sini ...
hdrz

Bahasa tempat saya tumbuh. Saya tahu bahwa itu belum mati ...
rexkogitans

@rexkogitans Ya saya mempelajarinya di sekolah, tetapi tidak dapat mengingat apa pun sejak saat itu ... Saya sedang bermain dengan beberapa pemrograman lagi sekarang
hdrz

4

pesta - 47 37 byte

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

Output pada sistem saya adalah:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

Terima kasih kepada Digital Trauma untuk saran yang bermanfaat.

Pada beberapa sistem Anda mungkin dapat menggunakan asciialih-alih man shmenyimpan byte.


1
man sh|egrep -io _\|\\w|sort -u|tr -d \\n
Digital Trauma

1
@DigitalTrauma Terima kasih! Eksperimen dan menemukan \wkecocokan _dan sudah case-sensitive, jadi bisa lebih pendek.

envalih-alih man shharus bekerja di sebagian besar lingkungan. Itu milikku. $ env|egrep -o \\w|sort -u|tr -d \\n-> 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.
YSC

Tidak ada J. Salahku.
YSC

4

PHP, 40 byte

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

Demo online .


1
+1 untuk keunggulan. Catatan: PHP 7.2 menghasilkan peringatan yang menyebutkan bahwa versi masa depan akan melempar kesalahan untuk konstanta yang tidak ditentukan. :-(
Titus

4

Retina , 30 19 16 15 12 byte

Saya memodifikasi upaya alfabet asli saya untuk versi terbaru ini. Setiap karakter dicetak dalam satu lingkaran.

Baris pertama kosong.


;
+T\`;w`w_

Cobalah online

Keluaran:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Terima kasih kepada Leaky Nun untuk bermain golf 4 byte dari upaya terakhir saya.


Saya akan mengatakan bahwa wdihitung sebagai konstanta yang berisi 9 atau lebih dari karakter yang diperlukan. Anda mungkin harus memperluas sisi kanan dan mengganti wsisi kiri dengan o. Meskipun Anda dapat menyimpan byte dengan menggunakan EObukan dkarena hanya berisi 5 karakter masing-masing.
Martin Ender

@ mbomb007 wdi dalam tahap transliterasi tidak ada hubungannya regex. Ini adalah singkatan yang diperluas ke daftar 63 karakter yang diperlukan. Setidaknya saya akan bertanya orlp tentang kasus ini secara khusus, karena sangat berbeda dari menggunakan \wdi regex.
Martin Ender

3

MATL , 11 byte

7W:'\W'[]YX

Cobalah 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

2 byte lebih pendek:8W:'\w'XX
DJMcMayhem

2
@DrGreenEggsandIronMan Terima kasih! Tapi saya pikir baris baru tidak diperbolehkan sebagai pemisah. Tantangannya mengatakan "string karakter alfanumerik ditambah garis bawah ... dan tidak lebih"
Luis Mendo

1
Jadi mengapa Anda tidak bisa melakukan 8W:'\w'XX!yang saya coba tetapi tidak berhasil
DJMcMayhem

@DrGreenEggsandIronMan Pertanyaan yang sangat bagus! Biarkan saya menjawab Anda dalam obrolan sehingga saya dapat menggunakan sedikit lebih banyak karakter
Luis Mendo

3

Brachylog , 25 byte

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

Ini mencetak yang berikut ini untuk STDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Penjelasan

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

3

Pyth, 13 12 byte

s:#"\w"0rk\|

Cobalah online!

Temukan semua karakter di U + 0000 hingga U + 007B yang cocok dengan regex /\w/ .

Keluaran 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz .

pendekatan alternatif: 15 byte

ssrMc4"0:A[a{_`

Cobalah online!

pada dasarnya menghasilkan rentang setengah-inclusive diperlukan: 0-:, A-[, a-{, _-`.


3

CJam , 15 14 11 byte

4 byte off berkat @FryAmTheEggman dan @Dennis!

A,'[,_el^'_

Cobalah 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

3

Brainfuck, 89 byte

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

Coba di sini

Detail:

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

Jika saya bisa berkomentar, saya harus meningkatkan jawaban orang lain. Tapi karena saya tidak bisa, saya mungkin memposting sendiri. Ketika saya mulai menulis ini, BF terendah adalah 96 panjang.


3

F #, 50 59 byte

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

Keluaran:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Sunting: melewatkan digit pertama kali

Edit2, terinspirasi oleh solusi Haskell ini, potongan F # ini adalah 67 byte.

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

Keluaran:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

3

Hexagony, 33

"A}_8_47<='>({a/_x.@.9!\356);');

Diperluas:

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

Keluaran:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_

Cobalah online!

Perhatikan bahwa ada karakter yang tidak patut dicetak 0x1A sebagai byte pertama dari program. Ini juga membuat baris pertama Hexagon yang diperluas terlihat agak tidak aktif. Terima kasih banyak kepada Martin karena menunjukkan trik ini kepada saya, juga karena menyarankan algoritma untuk mencetak alfabet!

Ini mencetak alfabet dengan menyimpan adan Apada dua sisi segi enam dan angka 26 pada sisi segi enam yang menyentuh sambungan antara huruf. Ini terlihat seperti ini:

A \ / a
   |
   26

Kemudian memasuki loop yang mencetak surat-surat dan kemudian menambahkannya, dan kemudian mengurangi jumlahnya. Setelah satu iterasi kita akan memiliki:

B \ / b
   |
   25

Dan seterusnya. Kode linear untuk inisialisasi adalah: 0x1A " A } a. Kode linear untuk loop luar perubahan aliran kontrol adalah: ; ) ' ; ) { ( ' =.

Setelah penghitung mencapai nol, kami mengikuti jalur yang berbeda untuk mencetak angka dan garis bawah. Ditulis linear ini adalah: x 3 5 6 8 4 7 9 ! ; { @. Ini menggantikan nilai tepi memori saat ini dengan angka 1203568479 (perhatikan bahwa xkode ASCII adalah 120), yang berisi semua angka desimal. Kami mencetak nomor ini dan kemudian kami menggunakan fitur Hexagony yang rapi: kami mencetak nomor mod 256 sebagai karakter ASCII. Ini kebetulan menjadi 95, atau garis bawah.


3

Brainfuck, 114 103 98 90 76 71 byte

Hal sepele lainnyaSolusi (sekarang non-sepele), tetapi kali ini adalah BF!

Disimpan 14 (!) Byte berkat @primo.

Disimpan 4 byte lebih banyak berkat saran @ primo untuk menghasilkan rentang mundur, dan saya menyimpan lainnya dengan menambahkan sebelum mencetak untuk huruf kecil.

Baru (pengulangan 4, 71):

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

Lama (nilai, 114):

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

Lama (pengulangan 1, 103):

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

Lama (pengulangan 2, 90):

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

Lama (pengulangan 3, 76):

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

Diasumsikan sel pembungkus 8 bit dan memori pembungkus. Saya menggunakan Coba online .

Semua dicetak _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

Pertama, bagian ini

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

menginisialisasi rekaman dengan nilai-nilai ini

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

Ini berfungsi karena hubungan pengulangan yang saya modelkan pada dasarnya adalah f(x) = 7 * (3 * x + 1), mundur. Lihat @ primo Halo, Dunia! Menjawab untuk penjelasan tentang apa itu hubungan perulangan.

Kemudian, cukup mudah untuk mengubah nilai-nilai ini menjadi yang bermanfaat. (dan cetak garis bawah)

Code: +++<--<-<-----<++++.+

Tape: [96, 65, 48, 26, 10]
       ^

Kemudian, loop sederhana menggunakan nilai-nilai untuk mencetak sisa karakter. Saya menghemat 1 byte dengan menambah sebelum mencetak.

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

Saya benar-benar perlu menemukan generasi urutan yang lebih pendek.

Saya menemukan hubungan pengulangan yang tampaknya bekerja dengan baik, tetapi mungkin ada yang lebih pendek tanpa berburu dan mematuk.

Saya menggunakan kalkulator regresi linier untuk menemukan apa yang seharusnya menjadi hubungan perulangan linear sesingkat mungkin, jadi saya mungkin harus menemukan beberapa formula lain jika saya ingin meningkatkan.

@ Primo benar-benar meningkatkan hubungan pengulangan, terima kasih.


Bagaimana dengan konstruksi mundur? +[--[<+++++++>->+<]>-]
Primo

@ poo Wow! Bagaimana cara kerjanya?
Biru

3 tidak rata sehingga akan berulang sebanyak 256 kali. Dengan diakhiri dengan >-], Anda dapat yakin bahwa istilah terakhir adalah 1 (x7) Sebenarnya, Anda mungkin harus memulainya -, selesai jauh lebih cepat.
Primo

3

Sesos , 17 byte

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

Keluaran

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_

Cobalah online! Periksa Debug untuk melihat kode biner yang dihasilkan.

Bagaimana itu bekerja

File biner di atas telah dihasilkan dengan merakit kode SASM berikut.

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.


Pikiran yang sama berpikir hebat!
Dennis

@ LeakyNun Hm, agak terlambat, tapi sepertinya milikmu lebih pendek 3 byte ...
Erik the Outgolfer

@EriktheOutgolfer Sesos dulu dikodekan dengan cara yang kurang efisien. Kedua program tersebut berukuran 17 byte sekarang.
Dennis

@ Dennis Ah, well, cache TIO terkadang membingungkan.
Erik the Outgolfer

2

Pyke, 13 byte

150m.C#P)\_+s

Coba di sini!

Menghasilkan ascii 0-150 dan memfilter menurut alfanumerik dan menambahkannya _sampai akhir

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.