การนับจำนวนในฐานชีวมวล 62


20

ภารกิจคือการสร้างสตริงทั้งหมดจาก 'a' ถึง '999' รวมถึงตัวอักษรตัวพิมพ์ใหญ่เช่น:

'a', 'b', 'c' ... 'y', 'z', 'A', 'B', 'C' ... 'Y', 'Z', '0', '1', 2' ... 
'8', '9', 'aa', 'ab', 'ac' ... 'az', 'aA', 'aB' ... 'aZ', 'a0' ... 'a9', 'ba'

และอื่น ๆ (เติมในช่องว่าง) โดยเริ่มจากสตริงว่าง

การป้อนข้อมูล:

  • จำนวนอักขระต่อเนื่องที่โปรแกรมต้องพิมพ์ถึง

เอาท์พุท:

  • อาร์เรย์ที่มีแต่ละสตริงหรือหนึ่งสตริงต่อหนึ่งบรรทัด

ชี้แจง:

  • ลำดับไม่สำคัญคุณสามารถพิมพ์ตัวอักษรตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กก่อนหากคุณต้องการ

  • ผลลัพธ์สามารถคืนค่าได้ทุกประเภทไม่จำเป็นต้องเป็นอาร์เรย์โดยเฉพาะแม้ว่าฉันสงสัยว่าการพิมพ์ชุดค่าผสมทั้งหมดจะไม่เป็นวิธีที่ง่ายที่สุด

  • อินพุตของ3จะพิมพ์สตริงทั้งหมดจาก'a'(หรือ'') ไปยัง'999'input อินพุต5สูงสุด'99999'และต่อไป


คุณหมายถึงอะไรโดยการส่งออกอาร์เรย์?
frederick

ดังนั้นตัวอักษรและตัวเลขเท่านั้น คุณใช้อะไรในการสั่งซื้อ ในตัวเลข ASCII มาก่อนจากนั้นจึงเป็นตัวอักษรตัวพิมพ์ใหญ่ตัวพิมพ์เล็ก
Luis Mendo

จำนวนที่มีค่าทั้งหมดเช่น ['a', 'b', 'c' .. ] คุณก็ควรจะเห็นผลลัพธ์ในแต่ละบรรทัดผ่าน STDOUT a = (function return)หรือสามารถกำหนดได้ผ่านทาง
Simon Landry

1
@ edc65 เท่าที่ฉันเข้าใจอินพุตเป็นจำนวนอักขระสูงสุดที่จะรวม ดังนั้นสำหรับการป้อนข้อมูล 4 คุณไปจากaการ9999สำหรับ 5 มันเป็นaไป99999และอื่น ๆ
Alex A.

3
โอเคขอบคุณสำหรับการล้างข้อมูล ที่บันทึกไว้จำนวนมากไบต์ :) ผมคิดว่าเรื่องปัจจุบันเป็นบิตสับสนตั้งแต่คุณดูเหมือนจะต้องbijectiveฐาน 62
เดนนิส

คำตอบ:


13

เยลลี่ขนาด 7 ไบต์

ØWṖṗR;/

นี่คือลิงก์ monadic ที่รับจำนวนเต็มเป็นอินพุตและส่งคืนอาร์เรย์ของสตริง

ลองออนไลน์!

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

ØWṖṗR;/  Main link. Argument: n

ØW       Yield 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'.
  Ṗ      Remove the last element (underscore).
    R    Range; yield [1, ..., n].
   ṗ     Cartesian product. For each k in the range, this yields the arrays of all
         strings of alphanumeric characters.
     ;/  Concatenate the arrays of strings of each length.

1
เมื่อเขียนภาษาของคุณสำหรับ codegolf คุณไม่สามารถแยกแก้ไขและใช้โซลูชัน 1 ไบต์ใช่ไหม
Florian Wendelborn

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

8
มันไร้สาระได้อย่างไร หากได้รับอนุญาตความท้าทายแต่ละอย่างจะได้รับการแก้ไขด้วย 1 ไบต์
Zibelas

7
@ UncleZeiv หน้ารหัส Jelly มีการเชื่อมโยงในชื่อโพสต์
edc65

7
@ UncleZeiv มีชุดอักขระเพียงชุดเดียวเท่านั้นที่ทำซึ่งเป็นหน้ารหัสวุ้น
isaacg

8

Haskell, 65 ไบต์

a#b=[a..b]
k n=mapM id.('a'#'z'++'A'#'Z'++'0'#'9'<$)=<<(1#)<$>1#n

ตัวอย่างการใช้งาน: k 3["a","b","c",....,"997","998","999"] ->

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

a#b = [a..b]        -- helper function that builds a list from a to b


        (1#n)<$>    -- map the function (1#), i.e. "build the list from 1 up to" 
                1#n -- on the list from 1 to n

                    -- now we have [[1],[1,2],[1,2,3]]

              =<<   -- map over this list (and combine results in a single list)
  (        <$)      -- a function that makes length of input copies of
 'a'#'z'++ ... '9'  -- all characters we need

                    -- now we have [["a..9"],["a..9","a..9"],["a..9","a..9","a..9"]]

mapM id.            -- and make the cartesian product of each sublist 

5

Python ขนาด 86 ไบต์

f=lambda n:n*[1]and[x+chr(y)for x in['']+f(n-1)for y in range(128)if chr(y).isalnum()]

ส่งออกรายการของสตริงที่ไม่ว่างเปล่า เพิ่มอักขระตัวอักษรผสมตัวเลขแต่ละตัวซ้ำ ๆ ให้กับเอาต์พุตแต่ละตัวn-1และสตริงว่าง


5

JavaScript (Firefox 30-57), 108 ไบต์

f=n=>n?[for(s of['',...f(n-1)])for(c of(t='abcdefghijklmnopqrstuvwxyz')+t.toUpperCase()+'0123456789')s+c]:[]

บันทึก 3 ไบต์โดยใช้ toUpperCase การคำนวณอักขระ 62 ตัวทำให้ฉันเพิ่มขึ้น 10 ไบต์


4
ฉันไม่สามารถรับรหัสของคุณให้ทำงานได้ว่า function f ไม่ได้ถูกกำหนด
Simon Landry

1
@SimonLandry ขออภัยฉันลืมf=ตอนเริ่มต้น (ฉันมักจะลืมทำเช่นนั้นเพื่อหาคำตอบแบบเรียกซ้ำ)
Neil

ใช้งานไม่ได้ด้วยเหตุผลด้านบน
CalculatorFeline

@CatsAreFluffy ฉันใส่f=ในปัญหาเพิ่มเติมใด ๆ เนื่องจากวิธีที่คุณพยายามโทรหา
Neil

4

หมากฝรั่งอบเชย, 15 ไบต์

0000000: 689b b718 05be a345 9c4b c283 d077 de    h......E.K...w.

ไม่สั้นพอแม้สิ่งนี้จะเป็นความท้าทายที่แน่นอนของ Cinnamon Gum ที่สร้างขึ้นเพื่อ :(

บีบอัดโดยแปลงจากฐานข้อมูล bijective 96 เป็นฐาน 256 ลองใช้ออนไลน์ อินพุตที่มากกว่า 2 จะทำให้เกิดปัญหากับ TIO

คำอธิบาย

นี้ decompresses เพื่อ [a-zA-Z0-9]{1,%s}regex hโหมดแล้วทดแทนการป้อนข้อมูลใน%sและผลสตริงทั้งหมดที่ตรงกับ regex ไม่


4

Ruby, 82 ไบต์

สร้างผลิตภัณฑ์คาร์ทีเซียนของอักขระที่ตั้งค่าตามความยาวที่กำหนด ชุดตัวอักษรที่ถูกสร้างขึ้นด้วยการคว้าตัวละครทุกตัวระหว่าง0และและกรองอักขระที่ไม่ใช่คำพูดและยังz_

->n{a=(?0..?z).grep(/\w/)-[?_];r=[]
n.times{|i|r+=a.product(*[a]*i).map &:join};r}

4

05AB1E , 9 8 ไบต์

รหัส:

ƒžj¨Nã€,

คำอธิบาย:

ƒ          # For N in range(0, input + 1), do:
 žj        #   Push predefined literal [a-zA-Z0-9_]
   ¨       #   Remove the last character (the underscore)
    N      #   Push N
     ã     #   Take the Cartesian product, with N repetitions.
      €,   #   For each element in the array, print with a newline

ใช้การเข้ารหัสCP-1252 ลองออนไลน์! .


4

Python 2.7, 136 134 ไบต์

ขอบคุณ Maltysen และ NonlinearFruit สำหรับการบันทึก 2 ไบต์

from itertools import*;from string import*;f=lambda n:[''.join(a) for i in range(1,n+1) for a in product(ascii_letters+digits,repeat=i)]

ใช้ascii_lettersและdigitsจากโมดูลสตริงและใช้ผลิตภัณฑ์คาร์ทีเซียนproductตั้งแต่จาก itertools เพื่อคำนวณชุดค่าผสมทั้งหมด

เอาท์พุต

out = f(3)

print out[:10]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

print out[100:110]
['aM', 'aN', 'aO', 'aP', 'aQ', 'aR', 'aS', 'aT', 'aU', 'aV']

print out[-10:]
['990', '991', '992', '993', '994', '995', '996', '997', '998', '999']

1
คุณสามารถลบช่องว่างระหว่างวงเล็บและตัวอักษร
Maltysen

ลองi in range(n)กับrepeat=i+1
NonlinearFruit

+1 สำหรับอินพุตเชิงลบ ที่มีอยู่ในrangeฟังก์ชั่น?
Kevin Cruijssen

3

Pyth - 13 12 ไบต์

บันทึก 1 ไบต์ด้วย @Jakube

sm^s+rBG1UTh

ลองมันออนไลน์ได้ที่นี่

s                    Add up the lists of different lengths  
 m          (Q)      Map implicitly over input
  ^     h(d)         Cartesian product of string to implicit lambda var + 1
   s                 Add up list
    ++               Concat up three things
     G               Alphabet
     rG1             Uppercase alphabet
     UT              All digits

ทำได้ดีนี่! สนใจที่จะให้คำอธิบาย?
Simon Landry

ฉันคิดว่ามีคำสั่งให้ทำซ้ำผ่านสตริงตามลำดับพจนานุกรม?
Leun Nun

@KennyLau nvm ไม่ได้ทำตัวเลข
Maltysen

rBG1บันทึกหนึ่งไบต์มากกว่า+GrG1
Jakube

@ Jakube โอ้Bifurcate ทำงานร่วมกับข้อโต้แย้ง? ขอบคุณ
Maltysen


2

MATLขนาด 12 ไบต์

:"3Y24Y2h@Z^

ค่านี้ใช้ตัวเลขเป็นอินพุต

ลองออนไลน์!

คำอธิบาย

:       % Implicitly take input, say N. Generate range [1 2... N]
"       % For each number in that range
  3Y2   %   Predefined literal: string with all letters, uppercase and lowercase
  4Y2   %   Predefined literal: string with all digits
  h     %   Concatenate horizontally
  @     %   Push number of characters corresponding to current iteration
  Z^    %   Cartesian power. Each result is a row 
        % End for each. Implicitly display

1

𝔼𝕊𝕄𝕚𝕟 , 21 ตัวอักษร / 27 ไบต์

ⒶïⓜᵖɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)ė)

Try it here (Firefox only).

Nope Nope Nope

คำอธิบาย

ⒶïⓜᵖɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)ė) // implicit: 
Ⓐïⓜ                    // [...Array(input)].map(($,_)=>...)
    ᵖ                   // push to stack:
     ɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)   // list of n-digit numbers in [a-zA-Z0-9]-ary
                     ė) // formatted into a matrix (no spaces)
                        // implicit stack output, newline-separated

ครั้งแรกที่ฉันเห็นภาษานี้และไม่สามารถค้นหาโดยใช้ Google ได้โปรดเพิ่มลิงก์ไปยังเอกสารของมันและ (หรือ) ซอร์สโค้ดหรือไม่ :)
Simon Landry

1
github.com/molarmanful/ESMin
Mama Fun Roll

ชื่อของภาษาเป็นช่องว่างอย่างจริงจัง 4 รายการหรือไม่
Bálint

ไม่ แต่เบราว์เซอร์ของคุณอาจแสดงอักขระทวีคูณไม่ถูกต้อง ใน ASCII เรียกว่า ESMin
Mama Fun Roll

1

Perl, 113 ไบต์ + ช่องว่าง

@r="";
for (1..shift) {
  @r = sub {
    map { $c=$_; map $c.$_, @{$_[1]} } @{$_[0]}
  }->(\@r, [0..9, "a".."z", "A".."Z"])
}
map say($_), @r

ใช้ "perl -E" ด้านบนพร้อมอาร์กิวเมนต์ที่มีตัวเลข ฉันอาจจะไม่สมควรนับที่ "แผนที่พูด" ล่าสุดในจำนวนตัวอักษร


1

J, 50 ไบต์

62&(('0123456789',~(,toupper)u:97+i.26){~#~#:i.@^)

ครึ่งหนึ่งของจำนวนไบต์ที่แน่นอนคือ 25 ใช้เพื่อสร้างตัวอักษรและตัวเลขที่จำเป็น


1

APL, 38 37 ไบต์

{⊃{⍵,,⍺∘.,⍵}/⍵⍴⊂,¨⎕a,⎕d,⍨⎕ucs 96+⍳26}

ฉันต้องถามพวกเขาจะไปรอบ ๆ ได้อย่างไรถ้าพวกเขาไม่สามารถจ่ายเงินได้ (⎕ucs 96+⍳26),⎕d=>⎕d,⍨⎕ucs 96+⍳26
Zacharý

ฉันรับรองได้ว่าคุณสามารถเดินทางได้ (ไม่ได้พูดถึง "ทำให้การเดินทางเหมือนกันเป็นประจำระหว่างที่ทำงานและที่บ้าน" เพราะมันน่าเบื่อ) คุณดูเหมือนจะพบว่ามันสามารถปรับปรุงได้อย่างง่ายดายในการแก้ปัญหาของคนอื่น โดยเฉพาะอย่างยิ่งถ้าคุณไม่มีงานประจำ จากนั้นมีชีวิตจริงที่ทำให้ทุกอย่างยิ่งยากขึ้น ...
lstefano

0

ยูทิลิตี Bash + GNU, 90

printf -vs %$1s
eval printf '%s\\n' ${s// /{=,{a..z\},{A..Z\},{0..9\}\}}|sed s/^=*//\;/=/d

อินพุตเป็นพารามิเตอร์บรรทัดคำสั่ง เอาต์พุตเป็นรายการที่คั่นด้วยช่องว่าง

ธิสำหรับปัจจัยการผลิตและ UPT รวม 3. วิ่งออกมาจากหน่วยความจำ 4 - eval printfใช้เวลาทั้งชุด 63 nองค์ประกอบของการขยายตัวทุบตี


0

Bash + GNU utils, 66

วิธีการที่แตกต่างกัน (และฉันคิดว่าแปลกเล็กน้อย) กับคำตอบอื่น ๆ ของฉัน :

dc -e"64 $1^[d2 48^r-P1-d0<m]dsmx"|base64 -w8|sed s_^/*__\;/[+/]/d
  • dcนับถอยหลังจาก 2 48 -1 ถึง 2 48 -64 nและPrints แต่ละหมายเลขผลลัพธ์เป็น bytestream (เช่นฐาน 256) หากอินพุตอยู่ระหว่าง 1 ถึง 4 รวมจะรับประกันว่าจะเป็น 6 ไบต์ต่อหมายเลข
  • base64 แปลงสิ่งนี้เป็นเอาต์พุต base64 และ 8 ไบต์ต่อ base64 หลักหนึ่งรายการต่อหนึ่งบรรทัด
  • sedตัดส่วนนำหน้า/(ฐาน 64 หลัก 63) ออกแล้วลบบรรทัดที่มี+หรือ/(ฐาน 64 หลัก 62 และ 63) สิ่งนี้จะปล่อยให้ลำดับที่ต้องการ

0

R , 73 ไบต์

y='';x=c(letters,LETTERS,0:9);for(i in 1:scan())cat(y<-outer(y,x,paste0))

yเริ่มออกเป็นสตริงที่ว่างเปล่าเป็นกรณีฐานx ใช้เวลาแต่ละข้อโต้แย้งการป้อนข้อมูลของตนและใช้ฟังก์ชั่นการรวมกันขององค์ประกอบในแต่ละและซึ่งเชื่อมสตริง บันทึกผลลัพธ์พิมพ์และทำซ้ำผ่าน STDIN จำนวนครั้งในการทำเช่นนี้'a','b','c',...,'8','9'outerpaste0yxycat

ลองออนไลน์!


0

Jq 1.5 , 97 ไบต์

range(.)as$n|[[range(97;123),range(65;91),range(48;58)]|implode/""|combinations($n+1)]|map(add)[]

ขยาย

  range(.) as $n           # for each n-digit sequence
| [
      [                    # build array of ordinals for
        range(97;123),     #   a-z
        range(65;91),      #   A-Z
        range(48;58)       #   0-9
      ]
    | implode/""           # make into array of strings
    | combinations($n+1)   # generate array of n-element combinations
  ]
| map(add)[]               # convert to sequence of strings

ลองออนไลน์!

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