พิมพ์ตัวอักษรและตัวเลขทั้งหมดพร้อมเครื่องหมายขีดล่าง


37

เขียนโปรแกรมหรือฟังก์ชั่นที่พิมพ์หรือผลตอบแทนสตริงของตัวอักษรและตัวเลขบวกขีดให้ในลำดับใด เพื่อความแม่นยำตัวอักษรต่อไปนี้จะต้องมีการส่งออกและไม่มาก :

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

เมื่อพิมพ์ไปยัง stdout บรรทัดใหม่ที่เป็นทางเลือกหลังจากที่คุณอนุญาต

ค่าคงที่แบบบิวด์อินที่มีอักขระข้างต้น 9 ตัวขึ้นไปจะไม่ได้รับอนุญาต


รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

นี่เป็นความท้าทายที่ง่ายมากซึ่งฉันเชื่อว่าจะสร้างคำตอบที่น่าสนใจ


ลีดเดอร์

นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

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


2
ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Dennis

คำตอบ:


11

นูน 9 ไบต์

วิธีการใหม่! นอกจากนี้ฉันรู้ว่ามันเหมือนกันกับคำตอบของ Luis แต่ใน Convex แต่ฉันคิดขึ้นมาเอง

'{,®\W"Oò

ลองออนไลน์!

คำอธิบาย:

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

โซลูชันเก่า 10 ไบต์:

A,'[,_¬^'_

ลองออนไลน์!

คำอธิบาย:

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

1
@ mbomb007 ใช่มันเทียบเท่ากับรหัสA,'[,_el^'_
CJam

การเข้ารหัสแบบนี้คืออะไร?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ CP-1252 หรือ Windows-1252
GamrCorps


12

Perl, 20 ไบต์

ต้อง-Eไม่มีค่าใช้จ่ายเพิ่มเติม

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

ดังนั้นคำตอบดั้งเดิมของฉัน (ด้านล่าง) ค่อนข้างน่าเบื่อเกินไป สิ่งเดียวที่ฉันสามารถทำได้คือข้างต้นนั่นเป็นสิ่งเดียวกัน แต่ดูสับสนมากขึ้น ... มันค่อนข้างจะเท่ากับด้านล่าง:

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

ฉันชอบคำแนะนำของ@ msh210ในความคิดเห็น แต่มันยาวไปหน่อย!


1
+1 น่าสนใจยิ่งขึ้นเล็กน้อย แต่ก็ยาวกว่าคือทั้งหมดนี้ 27 ไบต์: say grep/\w/,map chr,1..122|| say map{chr=~/\w/;$&}1..122|| say map{chr=~s/\W//r}1..122
msh210

1
@ msh210 ยังไม่สามารถย่อขนาดนี้ได้อีก ... จัดการ 25 แม้ว่า: say chr=~/\w/g for 1..255...
Dom Hastings

10

Cheddar, 31 27 bytes

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

สิ่งนี้แสดงให้@"ผู้ประกอบการทราบดี

ไม่สำเร็จเพราะในที่สุดฉันก็ดังขึ้นเพื่อแก้ไข@"ผู้ควบคุมเครื่อง ข้อผิดพลาดคือการสร้างช่วง Cheddar ไม่ใช่ช่วง JS จึงไม่สามารถทำงานได้อย่างถูกต้อง


คำอธิบาย

@"ผู้ประกอบการได้รับการออกแบบโดย @ CᴏɴᴏʀO'Bʀɪᴇɴและสิ่งที่มันไม่สามารถสร้างช่วงสตริงจาก LHS เพื่อ RHS เมื่อใช้เป็นโอเปอเรเตอร์ unary จะส่งคืนถ่านที่จุดรหัสที่กำหนด (เช่น python chr)

Ungolfed

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

10

brainfuck, 58 ไบต์

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

ลองมันออนไลน์

เริ่มต้นเทปถึง3 · 2 nและทำงานจากที่นั่น

+++[[<+>->++<]>]    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 ไบต์

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

ส่งคืน0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzดังนั้นจึงมีความยาวน้อยกว่าฟังก์ชันที่ส่งคืนสตริงตัวอักษรเพียง 6 ไบต์เท่านั้น ใช่มันแย่มาก


คุณสามารถลองค้นหาสตริงที่btoaส่งคืนเอาต์พุตที่ต้องการ
gcampbell

@gcampbell 60! สตริง (60 แฟคทอเรียล) อาจใช้เวลาพอสมควรในการค้นหา ...
Neil

atobคุณก็สามารถใช้
gcampbell

@ gcampbell ฉันต้องแยกสตริงที่ไม่สามารถคาดเดาได้
Neil

@gcampbell แต่กลับกลายเป็นว่ารุ่น btoa ใช้เวลา 62 ไบต์อยู่แล้ว: 45 ถึง 60 เข้ารหัส Alphanumerics 3 ตัวอักษร unencoded (รวม_) และ 14 _=>atob("")+""สำหรับ
Neil

9

Haskell, 38 ไบต์

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

ไม่มีอะไรจะอธิบายที่นี่


2
คำถาม: อะไรคือความแตกต่างระหว่าง:และ++?
Downgoat

3
@Downgoat: ++รับสองสายและต่อกัน :ใช้ถ่านและสตริงและทำให้ถ่านอยู่ด้านหน้าของสตริง "_"++['a'..'z']...ใช้ได้เช่นกัน แต่มีความยาวหนึ่งไบต์
nimi

8

PowerShell v3 +, 35 33 ไบต์

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

สร้างอาร์เรย์แบบไดนามิก1..127และมันได้ปลดเปลื้องเป็นcharอาร์เรย์ สิ่งนี้จะถูกป้อนให้กับ-matchโอเปอเรเตอร์ที่ทำงานกับ regex \wซึ่งจะคืนองค์ประกอบทั้งหมดที่ตรงกัน (เช่นตัวอักษรและตัวเลขและขีดเส้นใต้) เราสรุปองค์ประกอบอาร์เรย์เหล่านั้นใน a -joinเพื่อรวมมันเป็นสตริงเดียว ที่เหลืออยู่บนไปป์ไลน์และเอาท์พุทเป็นนัย


1
เฮ้นั่นไม่ยุติธรรมเลย ทางออกของฉันเหมือนกันยกเว้นฉันเริ่มต้นที่0...
Joey

@ โจอี้ต้องไปอย่างรวดเร็ว : D
AdmBorkBork

โดยเฉพาะอย่างยิ่งสำหรับการแก้ปัญหาเล็กน้อยและชัดเจนฉันเดา ;-)
Joey

7

V, 27 ไบต์

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

ลองออนไลน์!

คำตอบนี้มีความซับซ้อนอย่างน่ากลัว ฉันจะโพสต์คำอธิบายในภายหลัง

hexdump:

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

คำอธิบาย:

อ่านได้:

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 ถูกผูกไว้กับการตีกอล์ฟ!
Downgoat

7

J, 30 29 28 ไบต์

บันทึกเป็นไบต์ด้วย randomra!

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

เอาท์พุท:

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

คำอธิบาย

ฉันจะไม่ให้คำอธิบายต่อ seแต่จะให้ผลลัพธ์ระดับกลาง

   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 ไบต์

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

การแสดงออกให้เห็นถึงรายการของอุปกรณ์ปลายทางzip "aA0_" "zZ9_" สัญกรณ์ใช้เวลาแต่ละที่จะรวมและเชื่อมผล ขอขอบคุณที่เด Kaseorg สองไบต์กับแทน[('a','z'),('A','Z'),('0','9'),('_','_')]do(x,y)\(x,y)->[x..y]do>>=

เปรียบเทียบกับทางเลือก:

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
doสัญกรณ์ประหยัดสองไบต์:do(x,y)<-zip"aA0_""zZ9_";[x..y]
Anders Kaseorg

4

C, 50 ไบต์

โทรf()โดยไม่มีข้อโต้แย้งใด ๆ

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

พิมพ์

zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210

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

มี UB อยู่ที่นั่น คุณไม่ผ่านการโต้แย้งที่ต้องการ
Ven

@orlp - คุณใช้แทนputc คาดว่าสตรีมจะเขียนถึงเช่นกันซึ่งคุณไม่ได้ผ่าน ฟังก์ชั่นนั้นใช้งานได้ดี (ลองลบทั้งหมดของคุณและใช้งานได้) putcharputcputc
owacoder

@owacoder อ๊ะ!
orlp

1
@QPaysTaxes ผิดปกติ If the number of arguments does not equal the number of parameters, the behavior is undefined.6.5.2.2/6 ดูN1570
Ven

4

/// , 63 ไบต์

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

มันเป็นคำตอบที่ถูกต้องอย่างไร ดูเหมือนว่ามันละเมิดกฎ
nicael

@nicael กฎไหน?
Leun Nun

"ค่าคงที่แบบบิวด์อินที่มีอักขระข้างต้น 9 ตัวขึ้นไปไม่ได้รับอนุญาต" ... ฉันมีบางสิ่งที่ชัดเจน @Leaky หรือไม่
nicael

4
ใช่สิ่งนี้ไม่ได้ใช้ค่าคงที่ในตัว
Leun Nun

ตกลง แต่นี่มันแปลกอย่างน้อย OP แน่นอนไม่ขอให้คุณคัดลอกวางลำดับที่ไม่น่าสนใจ
nicael

4

Python 3, 58 ไบต์

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

โปรแกรมเต็มรูปแบบที่พิมพ์ไปยัง STDOUT

ผลลัพธ์คือ: _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

มันทำงานอย่างไร

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

ลองใช้กับ Ideone

หากค่าคงที่สตริงได้รับอนุญาตข้อมูลต่อไปนี้จะเป็น 45 ไบต์:

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

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

@LeakyNun นั่นทำให้เกิดข้อผิดพลาดทางไวยากรณ์ ฉันคิดเกี่ยวกับการทำสิ่งที่คล้ายกันprint('_',*filter(str.isalnum,map(chr,range(123))))แต่มันพิมพ์ช่องว่างแยก; OP กล่าวในความคิดเห็นว่า '... ไม่อนุญาตให้มีช่องว่างในเอาต์พุตเลย'
TheBikingViking

Python 2 สามารถประหยัดหนึ่งไบต์ด้วยวิธีการนี้:print''.join(filter(str.isalnum,map(chr,range(123)))),'_'
atlasologist

4

ความพยายามครั้งแรกของฉันที่ codegolf!

C #, 168 152 150 147 130 127 117 116 115 109 106 ไบต์

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

ขอบคุณมากที่ aloisdg, AstroDan, Leaky Nun และ Kevin Lau - ไม่ใช่ Kenny สำหรับความช่วยเหลือในการแสดงความคิดเห็น


2
ยินดีต้อนรับสู่ PPCG! อย่าลังเลที่จะลบพื้นที่ทั้งหมด! ตรวจสอบเคล็ดลับสำหรับการเล่นกอล์ฟใน C #เพื่อดูเคล็ดลับบางอย่าง
aloisdg พูดว่า Reinstate Monica

1
เยี่ยมมาก - ช่วยฉันอีก 2 ไบต์ ฉันจริงๆเริ่มที่จะชอบ codegolf นี้ :)
แดเนียล

1
AFAIK \wคลาส regex ครอบคลุมตัวอักษรและตัวเลขและ_ควรทำให้"\\w"เพียงพอสำหรับฟังก์ชันจับคู่ regex ของคุณ
หมึกมูลค่า

1
รหัสของคุณควรเป็นฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบไม่ใช่คำสั่ง นอกจากนี้ยังใช้ในการแบ่งปัน .NetFiddle สาธิตของรหัสของคุณ :)
aloisdg กล่าวว่าคืนสถานะโมนิกา

2
"C # ไม่ใช่ codegolf ที่ดีที่สุด" ฉันพบ C # สนุกพอที่จะเขียนรหัสกอล์ฟ ฉันคิดว่ามันเป็นภาษากระแสหลักที่ยอดเยี่ยมในการเล่นด้วย หากคุณอยู่ที่นี่เพื่อชนะคุณจะหลวม กำหนดวัตถุประสงค์ของคุณเป็นการเรียนรู้และมีช่วงเวลาที่ดีและคุณจะชนะตลอดเวลา
aloisdg พูดว่า Reinstate Monica


4

Object Pascal, 85 83 73 bytes

เพียงปาสคาลวัตถุธรรมดาโดยใช้ชุดของตัวอักษร การเขียนโปรแกรมแบบเต็มแทนที่จะเป็นโพรซีเดอร์จะตัด 2 ไบต์ การลบคีย์เวิร์ดของโปรแกรมจะโกนเพิ่มขึ้นอีก 10 ไบต์

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

ฉันเคยเป็นและอาจจะสับสนโดยการจำแนกประเภทที่แน่นอนของ Object Pascal Turbo / Borland Pascal และ FreePascal มีความสุขอย่างแน่นอนโดยไม่ต้องใช้programคำหลักที่ไร้ประโยชน์
จัดการ

@ การทำงานฉันไม่ทราบว่า ผิดปกติพอตอนนี้มันทำให้ Pascal การแข่งขันที่นี่ ...
hdrz

ภาษาที่ฉันเติบโตมาด้วย ฉันรู้ว่ามันยังไม่ตาย ...
rexkogitans

@rexkogitans ใช่ฉันเรียนที่โรงเรียนแล้ว แต่จำอะไรไม่ได้ตั้งแต่ตอนนั้น ... ฉันเล่นกับการเขียนโปรแกรมอีกครั้งตอนนี้
hdrz

4

bash - 47 37 ไบต์

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

เอาต์พุตในระบบของฉันคือ:

_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

ขอบคุณ Digital Trauma สำหรับคำแนะนำที่เป็นประโยชน์

ในบางระบบคุณอาจจะสามารถใช้asciiแทนที่จะman shบันทึกเป็นไบต์


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

1
@ DigitalTrauma ขอขอบคุณ! มีประสบการณ์และค้นพบการ\wแข่งขัน_และกรณีที่มีความรู้สึกไวอยู่แล้วดังนั้นจึงสามารถทำให้สั้นยิ่งขึ้น

envแทนที่จะman shทำงานในสภาพแวดล้อมส่วนใหญ่ มันทำในเหมือง ->$ env|egrep -o \\w|sort -u|tr -d \\n 0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
YSC

Jไม่มี ความผิดฉันเอง.
YSC

4

PHP, 40 ไบต์

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

สาธิตออนไลน์


1
+1 เพื่อความเป็นเลิศ หมายเหตุด้านข้าง: PHP 7.2 ให้คำเตือนว่าเวอร์ชั่นในอนาคตจะมีข้อผิดพลาดสำหรับค่าคงที่ที่ไม่ได้กำหนด :-(
Titus

4

Retina , 30 19 16 15 12 ไบต์

ฉันแก้ไขตัวอักษรดั้งเดิมของฉันสำหรับเวอร์ชั่นล่าสุดนี้ อักขระแต่ละตัวถูกพิมพ์เป็นวง

บรรทัดแรกว่างเปล่า


;
+T\`;w`w_

ลองออนไลน์

เอาท์พุท:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

ขอบคุณ Leaky Nun สำหรับการเล่นกอล์ฟ 4 ไบต์จากความพยายามครั้งล่าสุดของฉัน


ฉันจะบอกว่าwนับเป็นค่าคงที่ที่มีอักขระที่ต้องการ 9 ตัวขึ้นไป คุณอาจจะต้องขยายทางด้านขวามือและแทนที่ด้านซ้ายด้วยw oแม้ว่าคุณจะสามารถบันทึกไบต์ได้โดยใช้EOแทนที่จะใช้dเพราะมีเพียง 5 ตัวอักษรเท่านั้น
Martin Ender

@ mbomb007 wภายในขั้นการถอดเสียงไม่มีอะไรที่จะทำ regex มันเป็นชวเลขที่ขยายไปยังรายการ 63 ตัวอักษรที่ต้องการ อย่างน้อยฉันก็ถาม orlp เกี่ยวกับกรณีนี้โดยเฉพาะเนื่องจากมันค่อนข้างแตกต่างจากการใช้\wใน regex
Martin Ender

3

MATL 11 ไบต์

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

2 ไบต์สั้นกว่า:8W:'\w'XX
DJMcMayhem

2
@DrGreenEggsandIronMan ขอบคุณ! แต่ฉันคิดว่าบรรทัดใหม่ไม่ได้รับอนุญาตให้เป็นตัวคั่น ความท้าทายกล่าวว่า "สตริงของตัวอักษรและตัวเลขบวกขีดล่าง ... และไม่เกิน"
Luis Mendo

1
เหตุใดคุณจึงไม่สามารถทำสิ่ง8W:'\w'XX!ที่ฉันพยายาม แต่ใช้ไม่ได้
DJMcMayhem

@DrGreenEggsandIronMan คำถามที่ดีมาก! ให้ฉันตอบคุณในการแชทเพื่อที่ฉันจะได้ใช้ตัวละครอีกเล็กน้อย
Luis Mendo

3

Brachylogขนาด 25 ไบต์

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

นี่พิมพ์ต่อไปนี้เพื่อSTDOUT:

_9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

คำอธิบาย

"_"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 ไบต์

s:#"\w"0rk\|

ลองออนไลน์!

พบว่าตัวละครทุกตัวใน U + 0000 เพื่อ U + 007B ที่ตรงกับ /\w/regex

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzเอาท์พุท

วิธีการทางเลือก: 15 ไบต์

ssrMc4"0:A[a{_`

ลองออนไลน์!

0-:, A-[, a-{, _-`พื้นสร้างช่วงครึ่งรวมจำเป็นต้องใช้:



3

Brainfuck, 89 ไบต์

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

ลองที่นี่

รายละเอียด:

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

หากฉันสามารถแสดงความคิดเห็นได้ฉันจะต้องปรับปรุงคำตอบของผู้อื่น แต่เนื่องจากฉันทำไม่ได้ฉันก็อาจโพสต์ตัวเองได้ เมื่อฉันเริ่มเขียนสิ่งนี้ BF ที่ต่ำที่สุดคือ 96 ยาว


3

F #, 50 59 ไบต์

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

เอาท์พุท:

_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

แก้ไข: พลาดตัวเลขในครั้งแรก

Edit2 ซึ่งได้รับแรงบันดาลใจจากโซลูชัน Haskellนี้ตัวอย่างโค้ด F # นี้คือ 67 ไบต์

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

เอาท์พุท:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

3

Hexagony, 33

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

ขยาย:

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

เอาท์พุท:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1203568479_

ลองออนไลน์!

โปรดทราบว่ามีอักขระที่ไม่สามารถพิมพ์ได้0x1Aเป็นไบต์แรกของโปรแกรม สิ่งนี้ยังทำให้แถวแรกของรูปหกเหลี่ยมแบบขยายขยายออก ขอบคุณมาร์ตินที่แสดงเคล็ดลับนี้ให้ฉันเช่นเดียวกับการแนะนำอัลกอริทึมสำหรับการพิมพ์ตัวอักษร!

วิธีนี้จะพิมพ์ตัวอักษรโดยการจัดเก็บaและAบนขอบของรูปหกเหลี่ยมและหมายเลข 26 บนขอบของรูปหกเหลี่ยมที่สัมผัสรอยต่อระหว่างตัวอักษร ดูเหมือนว่านี้:

A \ / a
   |
   26

จากนั้นมันจะเข้าสู่ลูปที่พิมพ์ตัวอักษรและจากนั้นเพิ่มพวกเขาแล้วลดจำนวน หลังจากหนึ่งรอบเราจะได้:

B \ / b
   |
   25

และอื่น ๆ รหัสเชิงเส้นสำหรับ initialisation 0x1A " A } aคือ: ; ) ' ; ) { ( ' =รหัสเชิงเส้นสำหรับลูปนอกของการเปลี่ยนแปลงการควบคุมการไหลคือ:

เมื่อตัวนับถึงศูนย์เราจะไปตามเส้นทางที่แตกต่างกันเพื่อพิมพ์ตัวเลขและขีดล่าง เขียนเชิงเส้นตรงนี่คือ: x 3 5 6 8 4 7 9 ! ; { @. สิ่งนี้แทนที่ค่าของขอบหน่วยความจำปัจจุบันด้วยหมายเลข 1203568479 (โปรดทราบว่าxรหัส ASCII ของคือ 120) ซึ่งประกอบด้วยตัวเลขทศนิยมทั้งหมด เราพิมพ์หมายเลขนี้แล้วใช้คุณสมบัติที่เป็นระเบียบของ Hexagony: เราพิมพ์หมายเลข mod 256 เป็นอักขระ ASCII สิ่งนี้เพิ่งเกิดขึ้นที่ 95 หรือขีดล่าง


3

Brainfuck, 114 103 98 90 76 71 ไบต์

อีกวิธีแก้ปัญหาเล็กน้อย (ตอนนี้ไม่ใช่เรื่องไม่สำคัญ) แต่คราวนี้คือ BF!

บันทึกแล้ว 14 (!) ไบต์ขอบคุณ @primo

บันทึกอีก 4 ไบต์ด้วยคำแนะนำของ @ primo เพื่อสร้างช่วงถอยหลังและฉันบันทึกอีกอันโดยการเพิ่มขึ้นก่อนพิมพ์สำหรับตัวอักษรตัวพิมพ์เล็ก

ใหม่ (เกิดซ้ำ 4, 71):

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

เก่า (ค่า 114):

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

เก่า (เกิดซ้ำ 1, 103):

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

เก่า (เกิดซ้ำ 2, 90):

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

เก่า (เกิดซ้ำ 3, 76):

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

สมมติว่ามีการห่อเซลล์ 8 บิตและหน่วยความจำการห่อ ผมเคยลองออนไลน์

พิมพ์ออกมาทั้งหมด _AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789

ก่อนส่วนนี้

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

เริ่มต้นเทปด้วยค่าเหล่านี้

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

ใช้งานได้เพราะความสัมพันธ์ที่เกิดซ้ำที่ฉันทำแบบจำลองนั้นเป็นแบบf(x) = 7 * (3 * x + 1)ย้อนหลัง ดูHello, World ของ @ primo! คำตอบสำหรับคำอธิบายเกี่ยวกับความสัมพันธ์ที่เกิดซ้ำ

จากนั้นจึงค่อนข้างง่ายในการเปลี่ยนค่าเหล่านี้ให้เป็นประโยชน์ (และพิมพ์ขีดล่าง)

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

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

จากนั้นลูปแบบง่ายจะใช้ค่าเพื่อพิมพ์อักขระที่เหลือ ฉันบันทึก 1 ไบต์ด้วยการเพิ่มขึ้นก่อนการพิมพ์

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

ฉันต้องการค้นหาการสร้างลำดับที่สั้นกว่าจริงๆ

ฉันพบความสัมพันธ์ที่เกิดซ้ำซึ่งดูเหมือนว่าจะทำงานได้ดี แต่อาจมีการล่าและจิกน้อยกว่าหนึ่ง w / น้อยกว่า

ฉันใช้เครื่องคิดเลขการถดถอยเชิงเส้นเพื่อค้นหาสิ่งที่ควรจะเป็นความสัมพันธ์เชิงเส้นซ้ำที่สั้นที่สุดที่เป็นไปได้ดังนั้นฉันควรจะหาสูตรอื่นถ้าฉันต้องการปรับปรุง

@primo ปรับปรุงความสัมพันธ์ที่เกิดซ้ำได้ดีขึ้นจริง ๆ ขอบคุณ


การก่อสร้างย้อนหลังเป็นอย่างไร +[--[<+++++++>->+<]>-]
primo

@primo ว้าว! มันทำงานอย่างไร
บลู

3 ไม่เท่ากันดังนั้นมันจะวนเต็ม 256 ครั้ง เมื่อลงท้ายด้วย>-]คุณสามารถมั่นใจได้ว่าคำสุดท้ายจะเป็น 1 (x7) ที่จริงแล้วคุณควรเริ่มด้วย-มันเสร็จเร็วขึ้นมาก
โม่

3

Sesos , 17 ไบต์

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

เอาท์พุต

0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_

ลองออนไลน์! ตรวจสอบการดีบักเพื่อดูรหัสไบนารีที่สร้างขึ้น

มันทำงานอย่างไร

ไฟล์ไบนารีข้างต้นถูกสร้างขึ้นโดยการรวบรวมรหัส 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.

ว้าว, ฉันได้เกี่ยวกับการโพสต์วิธีการแก้ปัญหามากคล้ายกับของคุณ
Leun Nun

จิตใจเหมือนคิดว่าดี!
เดนนิส

@LeakyNun หืมมมครับปลาย แต่ดูเหมือนว่าคุณเป็น 3 ไบต์สั้น ...
เอริก Outgolfer

@EriktheOutgolfer Sesos เคยถูกเข้ารหัสด้วยวิธีที่มีประสิทธิภาพน้อยกว่า ทั้งสองโปรแกรมมีความยาว 17 ไบต์ในขณะนี้
เดนนิส

@Dennis Ah อืมแคช TIO อาจทำให้สับสนในบางครั้ง
Erik the Outgolfer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.