In tất cả các ký tự chữ và số cộng với dấu gạch dưới


37

Viết chương trình hoặc hàm in hoặc trả về một chuỗi các ký tự chữ và số cộng với dấu gạch dưới, theo bất kỳ thứ tự nào . Để chính xác, các ký tự sau cần phải được xuất ra, và không còn nữa :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Khi in ra thiết bị xuất chuẩn, một dòng mới tùy chọn sau khi đầu ra của bạn được cho phép.

Các hằng số tích hợp có chứa 9 hoặc nhiều ký tự ở trên không được phép.


Mã ngắn nhất trong byte thắng.

Đây là một thử thách rất đơn giản, tuy nhiên tôi tin rằng sẽ tạo ra một số câu trả lời thú vị.


Bảng xếp hạng

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành một liên kết mà sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

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


2
Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Dennis

Câu trả lời:


11

Lồi, 9 byte

Phương pháp mới! Ngoài ra, tôi nhận ra rằng nó khá giống với câu trả lời của Luis nhưng ở Convex, nhưng tôi đã nghĩ ra điều này một cách độc lập.

'{,®\W"Oò

Hãy thử trực tuyến!

Giải trình:

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

Giải pháp cũ, 10 byte:

A,'[,_¬^'_

Hãy thử trực tuyến!

Giải trình:

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

1
@ mbomb007 Có, nó tương đương với mã A,'[,_el^'_
CJam

Mã hóa này là gì?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ CP-1252 hoặc Windows-1252
GamrCorps


12

Perl, 20 byte

Yêu cầu -Ekhông có chi phí thêm.

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

Vì vậy, câu trả lời ban đầu của tôi (bên dưới) là một chút quá nhàm chán. Điều duy nhất tôi quản lý để đưa ra là ở trên, điều đó hoàn toàn giống nhau, nhưng có vẻ khó hiểu hơn một chút ... Nó khá chính xác tương đương với bên dưới:

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

Tôi như @ msh210 gợi ý trong các ý kiến 's, nhưng chúng chỉ là một chút quá dài!


1
+1. Thú vị hơn một chút nhưng dài hơn là bất kỳ thứ nào trong số này, tất cả 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 Vẫn không thể thu hẹp điều này hơn nữa ... Đã quản lý 25: say chr=~/\w/g for 1..255...
Dom Hastings

10

Cheddar, 31 27 byte

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

Điều này thể hiện tốt các @"nhà điều hành

Không hoàn thành bởi vì cuối cùng tôi đã có một sửa chữa @"toán tử. Lỗi là nó đã tạo ra một phạm vi Cheddar chứ không phải phạm vi JS nên nó không thể hoạt động chính xác


Giải trình

Các @"nhà điều hành được thiết kế bởi @ CᴏɴᴏʀO'Bʀɪᴇɴ, và những gì nó làm là tạo ra một loạt chuỗi từ LHS để RHS. Khi được sử dụng như một toán tử đơn nguyên, nó trả về char tại điểm mã đã cho (như của python chr)

Ung dung

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

10

Brainfuck, 58 byte

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

Hãy thử trực tuyến .

Khởi tạo băng thành 3 · 2 n và hoạt động từ đó.

+++[[<+>->++<]>]    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,'')

Trả về 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, do đó chỉ ngắn hơn 6 byte so với hàm trả về chuỗi bằng chữ. Vâng, nó hút.


Bạn có thể thử tìm một chuỗi btoatrả về đầu ra cần thiết.
gcampbell

@gcampbell 60! (60 giai thừa) chuỗi có thể mất một chút thời gian để tìm kiếm ...
Neil

Bạn chỉ có thể sử dụng atob.
gcampbell

@gcampbell Tôi phải loại trừ các chuỗi không thể trình bày bằng cách nào đó.
Neil

@gcampbell Hóa ra phiên bản btoa chỉ cần 62 byte: 45 để mã hóa 60 chữ số, 3 ký tự không mã hóa (bao gồm _) và 14 cho _=>atob("")+"".
Neil

9

Haskell, 38 byte

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

Không có gì để giải thích ở đây.


2
Câu hỏi: sự khác biệt giữa :++?
Hạ cấp

3
@Downgoat: ++lấy hai chuỗi và nối chúng. :lấy một char và một chuỗi và đặt char trước chuỗi. "_"++['a'..'z']...cũng hoạt động, nhưng dài hơn một byte.
nimi

8

PowerShell v3 +, 35 33 byte

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

Xây dựng một mảng động 1..127, ép nó thành một charmảng. Điều đó được cung cấp cho -matchtoán tử làm việc trên regex \w, sẽ trả về tất cả các phần tử khớp (nghĩa là chính xác cả chữ và số). Chúng tôi gói gọn các phần tử mảng đó trong một -joingói để tạo thành một chuỗi. Đó là còn lại trên đường ống và đầu ra là ẩn.


1
Này, thật không công bằng. Giải pháp của riêng tôi là giống hệt nhau ngoại trừ tôi bắt đầu lúc 0...
Joey

@Joey Gotta đi nhanh. : D
admBorkBork 18/07/2016

Đặc biệt đối với các giải pháp tầm thường và rõ ràng, tôi đoán vậy ;-)
Joey

7

V, 27 byte

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

Hãy thử trực tuyến!

Câu trả lời này là khủng khiếp . Tôi sẽ đăng một lời giải thích sau.

Hexdump:

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

Giải trình:

Có thể đọc được

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 được gắn với một lang golf!
Hạ cấp

7

J, 30 29 28 byte

Đã lưu một byte nhờ Randomra!

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

Đầu ra:

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

Giải trình

Tôi sẽ không cung cấp một lời giải thích cho mỗi se , nhưng sẽ cung cấp kết quả trung gian.

   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]

Biểu thức zip "aA0_" "zZ9_"đưa ra danh sách các điểm cuối [('a','z'),('A','Z'),('0','9'),('_','_')]. Các doký hiệu đưa từng kết quả và (x,y)bao gồm \(x,y)->[x..y]các kết quả. Cảm ơn Anders Kaseorg cho hai byte dothay vì >>=.

So sánh với các lựa chọn thay thế:

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
doký hiệu lưu hai byte:do(x,y)<-zip"aA0_""zZ9_";[x..y]
Anders Kaseorg

4

C, 50 byte

Gọi f()mà không có bất kỳ đối số.

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

Bản in

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210

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

Có UB ở đó. Bạn đã không vượt qua các đối số cần thiết.
Ven

@orlp - Bạn đã sử dụng putcthay vì putchar. putcmong đợi một luồng để viết là tốt, mà bạn đã không vượt qua. Chức năng này hoạt động tốt (thử loại bỏ putchoàn toàn của bạn và nó hoạt động).
owacoder

@owacoder Rất tiếc!
orlp

1
@QPaysTaxes đó là sai. If the number of arguments does not equal the number of parameters, the behavior is undefined.6.5.2.2/6, xem N1570 .
Ven

4

/// , 63 byte

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Làm thế nào nó là câu trả lời hợp lệ? Có vẻ như nó vi phạm các quy tắc.
nicael

@nicael quy tắc nào?
Nữ tu bị rò rỉ

"Các hằng số tích hợp có chứa 9 hoặc nhiều ký tự ở trên không được phép." ... Tôi có thiếu điều gì rõ ràng không, @Leaky?
nicael

4
Có, điều này đã không sử dụng bất kỳ hằng số tích hợp nào.
Leaky Nun

Ok, nhưng điều này là kỳ lạ ít nhất. Chắc chắn OP không yêu cầu bạn sao chép-dán chuỗi, điều đó không thú vị.
nicael

4

Python 3, 58 byte

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

Một chương trình đầy đủ in ra STDOUT.

Đầu ra là: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Làm thế nào nó hoạt động

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

Hãy thử nó trên Ideone

Nếu các hằng chuỗi được cho phép, thì sau đây sẽ là 45 byte:

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

1
print('_'+*filter(str.isalnum,map(chr,range(123))))
Nữ tu bị rò rỉ

@LeakyNun Điều đó gây ra lỗi cú pháp. Tôi nghĩ về việc làm một cái gì đó tương tự print('_',*filter(str.isalnum,map(chr,range(123)))), nhưng nó in các khoảng cách; OP cho biết trong các bình luận rằng '... không có khoảng trắng nào được phép ở đầu ra cả'.
TheBikingViking 18/07/2016

Python 2 có thể tiết kiệm một byte với cách tiếp cận này:print''.join(filter(str.isalnum,map(chr,range(123)))),'_'
đồ học

4

Nỗ lực đầu tiên của tôi tại codegolf!

C #, 168 152 150 147 130 127 117 116 115 109 106 byte

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

Cảm ơn rất nhiều đến aloisdg, AstroDan, Leaky Nun và Kevin Lau - không phải Kenny vì tất cả sự giúp đỡ trong các bình luận.


2
Chào mừng đến với PPCG! Hãy thoải mái để loại bỏ tất cả không gian! Ngoài ra, hãy kiểm tra Mẹo chơi gôn trong C # để biết một số mẹo.
aloisdg nói Phục hồi lại

1
Tuyệt vời - tiết kiệm cho tôi thêm 2 byte. Tôi thực sự bắt đầu thích codegolf này :)
Daniel

1
AFAIK, \wlớp regex bao gồm cả chữ và số, cũng _nên làm cho "\\w"đủ hợp lệ cho hàm so khớp regex của bạn.
Mực giá trị

1
Mã của bạn phải là một hàm hoặc một chương trình đầy đủ không phải là một câu lệnh. Đồng thời sử dụng .NetFiddle để chia sẻ bản trình diễn mã của bạn :)
aloisdg nói Phục hồi lại

2
"C # không phải là tốt nhất với codegolf" Tôi thấy C # đủ thú vị để viết mã golf. Tôi nghĩ rằng đó là một ngôn ngữ chính thống tuyệt vời để chơi với. Nếu bạn ở đây để giành chiến thắng, bạn sẽ mất. Xác định mục tiêu của bạn là học tập và có một thời gian tốt và bạn sẽ giành chiến thắng mọi lúc.
aloisdg nói Phục hồi lại


4

Đối tượng Pascal, 85 83 73 byte

Chỉ cần pascal đối tượng đơn giản bằng cách sử dụng một bộ ký tự. Viết một chương trình đầy đủ thay vì một thủ tục sẽ loại bỏ 2 byte. Xóa từ khóa chương trình sẽ cạo thêm 10 byte.

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

Tôi luôn luôn và có lẽ sẽ luôn bị nhầm lẫn bởi sự phân loại chính xác của Object Pascal. Turbo / Borland Pascal và FreePascal chắc chắn rất vui khi không có programtừ khóa vô dụng .
thao tác

@manatwork Tôi không biết điều đó. Thật kỳ lạ, bây giờ nó làm cho pascal cạnh tranh ở đây ...
hdrz

Ngôn ngữ tôi lớn lên cùng. Tôi biết rằng nó vẫn chưa chết ...
rexkogitans

@rexkogitans Vâng, tôi đã học nó ở trường, nhưng không thể nhớ bất cứ điều gì từ hồi đó ... Tôi đang chơi với một số chương trình một lần nữa
hdrz

4

bash - 47 37 byte

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

Đầu ra trên hệ thống của tôi là:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

Cảm ơn Digital Trauma vì những gợi ý hữu ích.

Trên một số hệ thống, bạn có thể sử dụng asciithay vì man shlưu một byte.


1
man sh|egrep -io _\|\\w|sort -u|tr -d \\n
Chấn thương kỹ thuật số

1
@DigitalTrauma Cảm ơn bạn! Đã thử nghiệm và tìm ra các \wtrận đấu _và đã không phân biệt chữ hoa chữ thường, vì vậy có thể rút ngắn hơn nữa.

envthay vì man shnên làm việc trên hầu hết các môi trường. Nó không thuộc về tôi. $ env|egrep -o \\w|sort -u|tr -d \\n-> 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.
YSC

Không có J. Lỗi của tôi.
YSC

4

PHP, 40 byte

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

Demo trực tuyến .


1
+1 cho sự xuất sắc. Lưu ý bên lề: PHP 7.2 đưa ra các cảnh báo đề cập rằng các phiên bản trong tương lai sẽ đưa ra lỗi cho các hằng số không xác định. :-(
Tít

4

Võng mạc , 30 19 16 15 12 byte

Tôi đã sửa đổi nỗ lực bảng chữ cái ban đầu của tôi cho phiên bản mới nhất này. Mỗi ký tự được in trong một vòng lặp.

Dòng đầu tiên là trống rỗng.


;
+T\`;w`w_

Dùng thử trực tuyến

Đầu ra:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Cảm ơn Leaky Nun vì đã chơi golf 4 byte trong nỗ lực mới nhất của tôi.


Tôi muốn nói rằng wđược tính là một hằng chứa 9 hoặc nhiều ký tự được yêu cầu. Có lẽ bạn sẽ phải mở rộng phía bên tay phải và thay thế wbên trái bằng o. Mặc dù bạn có thể lưu một byte bằng cách sử dụng EOthay dvì chúng chỉ chứa 5 ký tự mỗi ký tự.
Martin Ender

@ mbomb007 wtrong giai đoạn chuyển ngữ không có gì để làm regex. Đó là một tốc ký mở rộng đến một danh sách 63 ký tự cần thiết. Ít nhất tôi sẽ hỏi orlp về trường hợp này một cách cụ thể, vì nó hoàn toàn khác với việc sử dụng \wtrong regex.
Martin Ender

3

MATL , 11 byte

7W:'\W'[]YX

Hãy thử trực tuyến!

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 ngắn:8W:'\w'XX
DJMcMayhem

2
@DrGreenEggsandIronMan Cảm ơn! Nhưng tôi nghĩ rằng các dòng mới không được phép làm dấu phân cách. Thử thách cho biết "một chuỗi các ký tự chữ và số cộng với dấu gạch dưới ... và không còn nữa"
Luis Mendo

1
Vậy tại sao bạn không thể làm điều 8W:'\w'XX!mà tôi đã cố gắng nhưng không hiệu quả
DJMcMayhem

@DrGreenEggsandIronMan Câu hỏi rất hay! Hãy để tôi trả lời bạn trong trò chuyện để tôi có thể sử dụng thêm một chút nhân vật
Luis Mendo

3

Brachylog , 25 byte

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

Điều này in như sau STDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Giải trình

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

Bình thường, 13 12 byte

s:#"\w"0rk\|

Hãy thử trực tuyến!

Tìm tất cả các ký tự trong U + 0000 đến U + 007B phù hợp với biểu thức chính quy /\w/.

Đầu ra 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz.

phương pháp thay thế: 15 byte

ssrMc4"0:A[a{_`

Hãy thử trực tuyến!

về cơ bản tạo ra các phạm vi bao gồm một nửa yêu cầu : 0-:, A-[, a-{, _-`.


3

CJam , 15 14 11 byte

Giảm 4 byte nhờ @FryAmTheEggman và @Dennis!

A,'[,_el^'_

Hãy thử trực tuyến!

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

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

Hãy thử nó ở đây

Chi tiết:

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

Nếu tôi có thể nhận xét, tôi sẽ phải cải thiện câu trả lời của người khác. Nhưng vì tôi không thể, tôi cũng có thể đăng bài của riêng mình. Khi tôi bắt đầu viết bài này, BF thấp nhất dài 96.


3

F #, 50 59 byte

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

Đầu ra:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Chỉnh sửa: bỏ lỡ các chữ số lần đầu tiên

Edit2, lấy cảm hứng từ giải pháp Haskell đoạn trích F # này là 67 byte.

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

Đầu ra:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

3

Lục giác, 33

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

Mở rộng:

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

Đầu ra:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_

Hãy thử trực tuyến!

Lưu ý rằng có một ký tự không thể in 0x1A là byte đầu tiên của chương trình. Điều này cũng làm cho hàng đầu tiên của hình lục giác mở rộng trông giống như vậy. Rất cám ơn Martin đã chỉ cho tôi thủ thuật này, cũng như gợi ý thuật toán in bảng chữ cái!

Điều này in bảng chữ cái bằng cách lưu trữ aAtrên hai cạnh của hình lục giác và số 26 trên cạnh của hình lục giác chạm vào khớp giữa các chữ cái. Cái này trông giống như thế này:

A \ / a
   |
   26

Sau đó, nó đi vào một vòng lặp in các chữ cái và sau đó tăng chúng, và sau đó giảm số lượng. Sau một lần lặp, chúng ta sẽ có:

B \ / b
   |
   25

Và như vậy. Mã tuyến tính cho việc khởi tạo là : 0x1A " A } a. Mã tuyến tính cho các vòng lặp bên ngoài thay đổi luồng điều khiển là : ; ) ' ; ) { ( ' =.

Khi bộ đếm về 0, chúng tôi đi theo một đường dẫn khác để in các số và dấu gạch dưới. Viết ra một cách tuyến tính đây là : x 3 5 6 8 4 7 9 ! ; { @. Điều này thay thế giá trị của cạnh bộ nhớ hiện tại bằng số 1203568479 (lưu ý rằng xmã ASCII là 120), chứa tất cả các chữ số thập phân. Chúng tôi in ra số này và sau đó chúng tôi sử dụng một tính năng gọn gàng của Hexagony: chúng tôi in ra số mod 256 dưới dạng ký tự ASCII. Điều này chỉ xảy ra là 95, hoặc gạch dưới.


3

Brainfuck, 114 103 98 90 76 71 byte

Một chuyện nhỏ giải pháp (bây giờ không tầm thường), nhưng lần này là BF!

Đã lưu 14 (!) Byte nhờ @primo.

Đã lưu thêm 4 byte nhờ đề xuất của @ primo để tạo phạm vi ngược và tôi đã lưu một byte khác bằng cách tăng trước khi in cho các chữ cái viết thường.

Mới (tái phát 4, 71):

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

Cũ (giá trị, 114):

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

Cũ (tái phát 1, 103):

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

Cũ (tái phát 2, 90):

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

Cũ (tái phát 3, 76):

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

Giả sử các ô 8 bit và bộ nhớ gói. Tôi đã sử dụng thử trực tuyến .

Tất cả in ra _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

Đầu tiên, phần này

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

khởi tạo băng với các giá trị này

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

Điều này hoạt động bởi vì mối quan hệ lặp lại mà tôi mô hình hóa về cơ bản là f(x) = 7 * (3 * x + 1), ngược. Xem @ primo Xin chào, Thế giới! Câu trả lời cho một lời giải thích về những gì một mối quan hệ tái phát là.

Sau đó, khá đơn giản để thay đổi các giá trị này thành các giá trị hữu ích. (và in dấu gạch dưới)

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

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

Sau đó, các vòng lặp đơn giản sử dụng các giá trị để in phần còn lại của các ký tự. Tôi tiết kiệm 1 byte bằng cách tăng trước khi in.

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

Tôi thực sự cần phải tìm một thế hệ trình tự ngắn hơn.

Tôi tìm thấy một mối quan hệ tái phát có vẻ hoạt động tốt, nhưng có thể có một mối quan hệ ngắn hơn với ít săn bắn và mổ.

Tôi đã sử dụng một máy tính hồi quy tuyến tính để tìm ra mối quan hệ tái phát tuyến tính ngắn nhất có thể, vì vậy tôi có lẽ nên tìm một số công thức khác nếu tôi muốn cải thiện.

@primo thực sự đã cải thiện mối quan hệ tái phát rất nhiều, cảm ơn.


Làm thế nào về một công trình ngược? +[--[<+++++++>->+<]>-]
Primo

@primo Wow! Làm thế nào mà làm việc?
Màu xanh

3 là không đồng đều vì vậy nó sẽ lặp lại đầy đủ 256 lần. Khi kết thúc >-], bạn có thể chắc chắn rằng thuật ngữ cuối cùng sẽ là 1 (x7). Trên thực tế, có lẽ bạn nên bắt đầu với -, nó kết thúc nhanh hơn rất nhiều.
Primo

3

Vừng , 17 byte

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

Đầu ra

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_

Hãy thử trực tuyến!Kiểm tra gỡ lỗi để xem mã nhị phân được tạo.

Làm thế nào nó hoạt động

Tệp nhị phân ở trên đã được tạo bằng cách lắp ráp mã SASM sau.

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.

Wow, tôi đã định đăng một giải pháp rất giống với bạn .
Leaky Nun

Tâm trí giống nhau nghĩ tuyệt vời!
Dennis

@LeakyNun Hừm, hơi muộn, nhưng có vẻ như của bạn ngắn hơn 3 byte ...
Erik the Outgolfer

@EriktheOutgolfer Sesos từng được mã hóa theo cách kém hiệu quả hơn. Cả hai chương trình dài 17 byte.
Dennis

@Dennis Ah, tốt, bộ nhớ cache TIO đôi khi có thể gây nhầm lẫn.
Erik the Outgolfer

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.