พิมพ์ตาราง ASCII


28

งานคือการแสดงnตัวละครของตาราง ASCII

คุณอาจเขียนฟังก์ชัน (หรือโปรแกรมที่รับอาร์กิวเมนต์เป็นพารามิเตอร์อนุญาตให้ใช้ STDIN ด้วย) ที่ใช้พารามิเตอร์nซึ่งจะเป็นดัชนีของอักขระตัวสุดท้ายที่จะพิมพ์

งานค่อนข้างง่ายดังนั้นตามตัวอย่างนี่เป็นการนำไปปฏิบัติที่เป็นไปได้ใน Python 2.7:

(lambda n:map(chr, range(n)))(256)

อย่างที่ฉันบอกว่ามันเป็นงานง่าย ดังนั้นนี่คือ code-golf และรหัสที่สั้นที่สุดชนะ!

แก้ไข

เนื่องจากคุณบางคนชี้ให้เห็นรหัสนี้ไม่ได้พิมพ์ผล เป็นเพียงตัวอย่างเนื่องจากฉันอาจพยายามอธิบายปัญหาเป็นภาษาอังกฤษ ;-)

EDIT2

อย่าลังเลที่จะโพสต์คำตอบในภาษาการเขียนโปรแกรมใด ๆ แม้ว่าจะไม่ใช่รหัสสั้นที่สุด อาจมีการใช้งานที่น่าสนใจอยู่ที่นั่น!

edit3

แก้ไขตัวอย่างเพื่อพิมพ์ผลลัพธ์


1. มันจะต้องมีฟังก์ชั่นหรือไม่? 2. ตามรหัสอ้างอิงของคุณnจะเป็นอักขระตัวแรกที่ไม่ได้พิมพ์
Dennis

2
จริงๆแล้วรหัสอ้างอิงไม่ได้พิมพ์อะไรเลย มันจะส่งกลับรายการของตัวละครและให้ REPL ทำสิ่งที่ต้องการด้วยผลลัพธ์
จัดการ

1
มีใครช่วยอธิบายคำลงคะแนนได้บ้างไหม? ฉันขอโทษถ้าภาษาอังกฤษของฉันไม่ดี หากมีสิ่งที่ไม่ชัดเจนในคำถามโปรดบอกฉัน
oopbase

1
for x in range(input()):print chr(x)จะพิมพ์ตัวอักษรจริง ๆ ถ้าคุณต้องการแก้ไขตัวอย่างของคุณ
FryAmTheEggman

2
nota [i for i in range(n)]ค่อนข้างคล้ายกับrange(n)
njzk2

คำตอบ:


19

CJam, 4 ไบต์

ric,

โปรแกรมเต็มรูปแบบที่อ่านจาก STDIN (ช่องป้อนข้อมูลในล่ามออนไลน์ )

สิ่งนี้เรียกใช้งานrange(chr(int(input())))โดยใช้ประโยชน์จากความจริงที่,ให้อาร์เรย์ของอักขระคืนมาหากอาร์กิวเมนต์เป็นอักขระ

ฉันเรียกว่า dibs on c,(2 bytes) ในกรณีที่สมมติว่า input อยู่ใน stack แล้วจะอนุญาตให้ทำได้


คุณต้องระบุอินพุตหรือไม่? นักวิ่งออนไลน์เพียงแค่ส่งรหัสออกมา
จัดการ

12
@ การผลิต: เพียงไม่กี่วินาที คุณต้องรีบเมื่อคุณโพสต์สิ่งเหล่านี้ ... ;)
เดนนิส

ฉันสับสนเล็กน้อยในเรื่องนี้ อักขระที่ 0 (aka 0c) ป้องกันไม่ให้สิ่งอื่นถูกพิมพ์หลังจากมัน ric (ดูเหมือนว่าจะทำงานได้ดีซึ่งหมายความว่ารหัสใช้งานไม่ได้
kaine

1
@kaine: Internet Explorer เขียนด้วย C ++ ซึ่งไม่ได้ใช้สตริงที่สิ้นสุดด้วยค่า null ตามนี้อักขระ null เป็นข้อผิดพลาดในการแยกวิเคราะห์ใน HTML 5; เบราว์เซอร์จะต้องแทนที่ด้วย หรือยกเลิกการประมวลผลเอกสาร
Dennis

4
โปรดทราบว่าคุณต้องป้อนขนาดใหญ่พอnเนื่องจากอักขระ ASCII สองสามตัวแรกเป็นอักขระที่ไม่สามารถพิมพ์ได้ ความจริงที่สนุกสนาน: โปรแกรมนี้ยังส่งออกตาราง Unicode เช่น n = 9999
Sanchises

25

สมอง - 169 146 142 ไบต์

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

ข้อ จำกัด :

  • EOF ต้องเป็น 0
  • ต้องใช้เซลล์ห่อ 8 บิต
  • เนื่องจาก ^ mods อินพุต 256

ไม่ใช่คำตอบที่สั้นที่สุดที่นี่ แต่เฮ้ brainfuck! นี่จะเป็นความท้าทายสมองที่ดีจริง ๆ ยกเว้นความจริงที่ว่ามันต้องมีการป้อนข้อมูลที่มนุษย์สามารถอ่านได้โดยไม่รับประกันจำนวนหลัก ฉันอาจต้องป้อนข้อมูลเพื่อให้มีศูนย์นำหน้าเพื่อให้มีความยาว 3 ตัวอักษร แต่ความสนุกคืออะไร : D ปัญหาสำคัญอย่างหนึ่งของการป้อนข้อมูลด้วยวิธีนี้คือโครงสร้างการแยกหรือการวนรอบของ brainfuck ตรวจสอบว่าเซลล์ปัจจุบันเป็นศูนย์หรือไม่ เมื่ออินพุตสามารถมีเลขศูนย์มันสามารถทำให้รหัสของคุณที่จะสาขาที่ไม่ควรจะใช้ เพื่อแก้ปัญหานี้ฉันจะเก็บตัวเลขแต่ละตัวของการป้อนค่าบวก 1จากนั้นลบส่วนเกินในวินาทีสุดท้ายที่เป็นไปได้ ด้วยวิธีนี้ฉันรู้อยู่เสมอว่าเลขศูนย์คืออะไร

ฉันบอกว่านี่จะเป็นความท้าทายสมองที่ยอดเยี่ยมโดยไม่ต้องแยกวิเคราะห์ข้อมูล ทำไมถึงเป็นอย่างนั้น? เรามาแกล้งทำเป็นว่าเราไม่ได้ใส่ตัวเลข เราจะบอกว่าสิ่งที่ท้าทายคือ "ให้ไบต์ของอินพุตป้อนอักขระ ASCII ทั้งหมดด้านล่างไบต์นั้น" นี่คือคำตอบของฉัน:


brainfuck - 8 ไบต์

,[->.+<]

มันค่อนข้างแตกต่าง! โปรแกรมจริงใช้คำสั่ง 135 คำสั่งในการรวบรวมอินพุต (มากกว่า 95% ของโปรแกรม!) เพียงเพราะมันเป็นมนุษย์พิมพ์ เก็บตัวเลขเป็นไบต์และให้ที่ให้ฉันและมันใช้เวลาเพียงหนึ่ง

(ความจริงสนุก: ถ้าคุณเข้าใจโปรแกรมสมมุติขอแสดงความยินดี! คุณเข้าใจสมองอย่างครบถ้วนภาษาทั้งหมดมีเพียงแปดคำสั่งและโปรแกรมนั้นจะใช้แต่ละครั้งอย่างแน่นอน)

คำอธิบาย

-[+>+[+<]>+]>+               abuse 8 bit wrapping to put 47 in cell 4

>>,[>,]                      starting in cell 6; get each character of input

<[<]<[->>[->]<[<]<]          subtract the value of cell 4 from each input character
                             '0' has an ascii value of 47 so subtracting 47 from each
                             digit gives you that digit's value plus 1

>>>[                         if the number is in more than one cell
                             (when the program first starts this means "if the input has
                             more than one digit")

[<[-<+<+<+>>>]               copy first input cell to 3 new cells

+++++++++[<[-<+>]<<          do some fancy addition magic to multiply that value by 10
[-<+>>>+<<]<[->+<]>>>>-]]

<,<<,>                       clean up a bit (abusing comma to set cells to 0)

[->>>+<<<]>>>                add the value to the next cell of input

----------                   because we multiplied (the digit plus 1) by 10; the answer
                             is 10 too high; so subtract 10

>]                           if the input is still in multiple cells; do the song and
                             dance again (multiply by 10; add to next cell; subtract 10)

<-                           we never got a chance to fix the final digit; so it's still 1
                             too high

               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
               ;;         we have now finished processing input         ;;
               ;;     the tape is empty except for the current cell     ;;
               ;;  the current cell contains the number that was input  ;;
               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[                            while the cell containing input != 0

-                            subtract 1 from it

>.+                          go a cell to the right; output that cell; then add 1

<]                           repeat

ดี! +1 อย่างแน่นอน :-)
oopbase

1
คุณสามารถบันทึกบางไบต์ในส่วนการส่งออก: >[-]<[->.+<]ตั้งเซลล์ถัดจากเซลล์ปัจจุบันเป็น 0 จากนั้นนับเซลล์ปัจจุบันลงในขณะที่เพิ่มเซลล์ถัดจากมันและพิมพ์ค่าพร้อมกัน
Shujal

@shu นั่นเป็นจุดที่ยอดเยี่ยม! ฉันไม่คิดอย่างนั้น นอกจากจะสั้นลงแล้วยังช่วยแก้ไขปัญหาที่เกิดกับการสำลักอินพุตขนาดใหญ่และอาจเร็วขึ้น! ขอบคุณ :)
undergroundmonorail

ใช่มันเร็วกว่ามาก ฉันไม่ต้องการชิ้น>[-]<ส่วนนี้เพราะฉันอยู่ถัดจากเซลล์ว่าง :)
undergroundmonorail



11

Befunge 93 - 23 21

&> :#v_,>:#,_@
 ^-1:<

Befunge 93 - 15 13 (โดย Ingo Bürk)

อันนี้พิมพ์รายการในสิ่งที่ตรงกันข้าม แต่ OP บอกเพียงว่าเราต้องพิมพ์nอักขระตัวแรกไม่ใช่ว่าจะต้องเป็นไปตามลำดับ

&>::>v
@^-1,_

อาจไม่สามารถเล่นกอล์ฟได้อีกต่อไปโดยไม่ย้ายไปที่ Befunge98 (สำหรับผู้ดำเนินการ ";" ดูคำตอบของ @ Kasran )

ลองที่นี่:


ฉันหวังว่าคุณไม่คิดว่าผมใช้ล่ามในบรรทัดจากที่นี่ :)
Ingo Burk

คำถามไม่ได้ระบุว่าเราจะต้องพิมพ์ในลำดับใด ๆ ดังนั้นนี่คือห้าไบต์ที่สั้นกว่า: &> #- #1:# :#,_@(มันแค่พิมพ์ในสิ่งที่ตรงกันข้าม)
Ingo Bürk

ฉันลบออกไปอีกไบต์รวมเป็น 15 เพราะมีการขึ้นบรรทัดใหม่ฉันจะแก้ไขมันในโพสต์ของคุณ
Ingo Bürk

เล่นได้ดีกับการเล่นกอล์ฟเพิ่มเติม :) สำหรับล่ามแบบอินไลน์ฉันไม่ทราบว่ามีอยู่ มันยิ่งใหญ่ขอบคุณ :)
karhell

ล่ามเป็นของใหม่จากความท้าทายที่เชื่อมโยง ฉันแค่คิดว่าฉันจะใช้มันเมื่อฉันเห็นคำตอบของคุณ :)
Ingo Bürk

8

Java, 151 128 77 62 56 ไบต์

เริ่มแรกลองเล่น code-golfing

void f(int n){for(char i=0;++i<=n;System.out.print(i));}

การใช้งาน:

import java.util.Scanner;
class A {

    public static void main(String[] a) {
        int num = new Scanner(System.in).nextInt();
        new A().f(num);
    }

    void f(int n) {
        for (char i = 0; ++i <= n; System.out.print(i));
    }
}

ขอขอบคุณ @Shujal, @flawr, @Ingo Bürkและ @Loovjo สำหรับการลดจำนวนไบต์ที่ร้ายแรง


1
คุณสามารถบันทึกตัวอักษรบางส่วนด้วยการประกาศ int ในขณะที่เปิดเครื่องสแกนเนอร์: และการเปลี่ยนแปลงวงไปint i,n=new Scanner(... นอกจากนี้คุณไม่จำเป็นต้องเรียกfor(;++i<n;) Character.toStringคุณสามารถป้อนค่า System.out เป็นค่าถ่านและมันจะส่งออกอย่างมีความสุข
Shujal

1
ความท้าทายช่วยให้คุณใช้aเป็นอินพุต และฉันคิดว่าคุณสามารถทำให้forลูปสั้นลงโดยใช้สถานที่ที่เพิ่มขึ้นในฐานะที่เป็นวงวน: for(;++i<n;System.out.print((char)i));(แต่คุณอาจต้องเปลี่ยนค่าเริ่มต้นหรือค่าสิ้นสุดโดย + - 1)
ข้อบกพร่อง

1
คุณได้รับอนุญาตให้เขียนฟังก์ชั่นดังนั้นไม่จำเป็นต้องมีทั้งชั้นเรียนและทุกอย่าง
Ingo Bürk

1
@RodolfoDias คุณแน่ใจหรือไม่ เห็นได้ชัดว่าควรจะเทียบเท่ากับ++i<n+1 ++i<=nหมายเหตุ=ในนั้นอย่างไรก็ตาม! มันแค่บันทึกหนึ่งไบต์ มันใช้งานได้สำหรับฉัน
Ingo Bürk

1
เราลงมาvoid f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}ที่ 62 ไบท์ อย่างน้อยตอนนี้ฉันไม่เห็นการเล่นกอล์ฟมากขึ้น :)
Ingo Bürk

6

APL, 5

⎕UCS⍳

ตัวอย่างการใช้งาน:

⎕UCS⍳256

1
คุณไม่จำเป็นต้องทำ dfn เพียง⎕UCS⍳จะทำงานได้ดี 5 ตัวอักษรดังนั้น
Moris Zucca

1
คุณไม่จำเป็นต้องสนับสนุนจุดรหัสเกิน 127 เพียง↑⎕AVจะทำงานได้ดี ดังนั้น 4 ตัวอักษร
อดัม

6

JavaScript, ES6 - 52 58 56 53 44 42 ไบต์

n=>String.fromCharCode(...Array(n).keys())

วางสิ่งนี้ลงในคอนโซล Firefox f(NUM)ทำงานเป็น

ต้องทำให้มันนานขึ้นเพราะคนแรกไม่ยอมรับอินพุตที่ถูกต้อง

ลง 3 ขอบคุณ edc65! ลดลงเหลือ 44 ด้วยการหมุน!


1
สิ่งนี้ไม่ได้จัดการกับพารามิเตอร์หรืออินพุต
จัดการ

เพียงแค่เปลี่ยน 70 เป็นตัวเลขอื่น นั่นคืออินพุต
Scimonster

โอเคฉันอัปเดตเพื่อรับอินพุตด้วยราคา 6 ไบต์
Scimonster

3
-2: f = n => [... Array (n)]. map ((v, i) => String.fromCharCode (i))
edc65

2
44 ตัวละคร! f=n=>String.fromCharCode(...Array(n).keys())
หมุน

6

Haskell, 17 23 ไบต์

flip take['\0'..]

ไม่แน่ใจว่ามันเป็นไปได้ที่จะทำดีกว่านี้หากไม่มีการนำเข้า

แก้ไข

วิธีแก้ปัญหาแรกของฉันไม่ได้พิมพ์ผลลัพธ์ดังนั้นอนุญาตให้มีอีก 6 ตัวอักษรสำหรับ:

print.flip take['\0'..]

นอกจากนี้ไม่สั้นลง (25 ตัวอักษรที่มีการพิมพ์โดยไม่มี 19 ตัว) แต่เป็นวิธีอื่นที่น่าสนใจ (ต้องใช้ 'Data.List'):

print.((inits['\0'..])!!)

นี่ไม่ได้พิมพ์ผลจริง
nyuszika7h

@ nyuszika7h ตอนนี้ก็ทำแล้ว
John Dvorak

(`take`['\0'..])บันทึกเป็นไบต์
Laikoni


4

C, วันที่ 31 30 28 27

k;f(n){putch(k++)<n&&f(n);}

เนื่องจาก putch ไม่เป็นมาตรฐานนี่คือรุ่นที่เข้ากันได้อย่างสมบูรณ์:

k;f(n){putchar(k++)<n&&f(n);}

ต้องถูกเรียกจาก main:

main(){f(255);}

แก้ไข: ปรับปรุงโดยใช้ประโยชน์จากมูลค่าส่งคืน putchar
แก้ไข 2: ลดลงโดยอักขระอื่นผ่านการสอบถามซ้ำ


1
putch เป็นฟังก์ชั่นที่ไม่ได้มาตรฐาน ฉันขอถามด้วยว่าทำไมคำตอบนี้จึงลดลง?
Stuntddude

@Stuntddude ฉันจะเพิ่มรุ่นทางเลือกที่ใช้ putchar และไม่ทราบว่าทำไมนี่เป็น downvote ท้ายที่สุดมันเป็นหนึ่งในจำนวนที่สั้นกว่า
takra

4

Perl, 17 ไบต์

say chr for 0..$_

1
วงเล็บมากเกินไป print chr for 0..$ARGV[0]
จัดการ

คุณถูก! เป็นเวลานานแล้วที่ฉันใช้ Perl
Demnogonis

1
คุณสามารถใช้shiftแทน$ARGV[0]การบันทึก 2 ไบต์
nyuszika7h

sayถ้าคุณได้รับอนุญาตให้พิมพ์ตัวอักษรบนเส้นที่แตกต่างกันคุณสามารถใช้ -nนอกจากนี้นับจำนวนตัวอักษรจะสั้นถ้าคุณทำมันเป็นหนึ่งซับด้วย echo "90" | perl -nE'say chr for 0..$_'จะนับเป็น18ตัวอักษร 17สำหรับsay chr for 0..$_บวกสำหรับ1 n
hmatt1

คุณถูก. แต่sayจะไม่ทำงานกับ perl ทุกรุ่น
Demnogonis

3

CJam, 3

,:c

ฉันถือว่าอาร์กิวเมนต์เป็นองค์ประกอบสแต็คด้านบน

ตัวอย่างการใช้งาน:

256,:c

ri,:c


3

awk - 27

{while(i<$0)printf"%c",i++}

เพื่อให้พารามิเตอร์ใน stdin เรียกใช้เช่น:

awk '{while(i<$0)printf"%c",i++}' <<<96

เพื่อความสนุก: "คิดว่าเป็นรุ่นบวก" เริ่มต้นด้วยการสรุปyes:

yes|head -96|awk '{printf"%c",NR-1}'

NR-1เป็นสิ่งจำเป็นในการพิมพ์สำหรับ(char)0 NR==1:-(

และทำไมเราไม่มีnoคำสั่ง? นั่นหมายความว่าไง!


1
alias no='yes no'
nyuszika7h

... แต่จากนั้นฉันก็ต้องนับจำนวนตัวอักษรของนิยามนามแฝงนั้นด้วย ... :-(

3

J - 5 ไบต์

{.&a.

{.เป็นหัวหน้าa.คือตัวอักษร (รายการของตัวอักษรทั้งหมด) และ&พันธบัตรพวกเขาสร้างคำกริยาที่เรียกว่าชอบ:

{.&a. 100 NB. first 100 characters

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

  ijconsole <<< '127 {. a.' | hd

โปรดสังเกตว่าตัวอักษรไม่ใช่ ASCII อย่างแน่นอน
FUZxxl

ถึง{.&a. 127จะไม่ใช่เหรอ?
jpjacobs

ไม่ใช่เพราะ J มีอักขระวาดกล่องแทนอักขระควบคุมบางตัว
FUZxxl

ที่จริงแล้วการเขียนลงไฟล์และตรวจสอบด้วยโปรแกรมดู hex บอกฉันว่า J ให้ผลลัพธ์ที่ถูกต้อง (0x00 0x01, ... ) มันเป็นเพียงล่าม J / IDE ตีความค่าเหล่านั้นเป็นตัวละครที่ถอนตัวแทนที่จะเป็นตัวควบคุม เหมือนกับภาษาอื่น ๆ ที่ใช้charหรือเทียบเท่าทั้งหมด
jpjacobs

มันแปลกเพราะฉันทดสอบมันบนกล่อง UNIX ของฉันและมันก็เอาท์พุทอักขระ Unicode สำหรับรหัสจุดบางส่วน
FUZxxl


3

Brainfuck, 44 ไบต์

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

คาดหวังสตริงทศนิยมโดยไม่ขึ้นบรรทัดใหม่

ลองออนไลน์

การอ่านจำนวนเต็มในช่วง[0, max_cell_size]ใน brainfuck นั้นไม่ใช่เรื่องยาก ฉันขอแนะนำให้คุณคิดค้นวิธีการที่สะอาดด้วยตัวคุณเอง ฉันคิดว่านี่เป็นการออกกำลังกายระดับเริ่มต้น (การดำเนินการย้อนกลับของการพิมพ์ค่าตัวเลขของเซลล์มีส่วนร่วมมากขึ้นและถือได้ว่าเป็นงานระดับกลาง)

นี่เป็นรุ่น 58- ไบต์ที่สามารถจัดการ256กับการใช้งาน 8 บิต:

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


ทำไมฉันไม่คิดเรื่องนี้ ??? นี่คือความคิดสร้างสรรค์ !!!
FinW

ฉันสามารถยืมสิ่งนี้เพื่อใช้กับคำตอบในอนาคตได้หรือไม่?
FinW

1
@FinW ฉันเดาว่าคุณไม่รู้เกี่ยวกับเมตาโพสต์นี้
Mitch Schwartz

2

Golfscript - 5

ขอบคุณ @Dennis

~,''+

1
~,""+สั้นและประมวลผลอินพุตจาก STDIN อย่างถูกต้อง
Dennis

@Dennis นั่นไม่ได้สร้างผลลัพธ์ใด ๆ สำหรับฉัน ...
Beta Decay

1
คุณกำลังใช้อินเทอร์เรเตอร์ออนไลน์หรือไม่ ในการจำลองอินพุตจาก STDIN อย่างถูกต้องคุณต้องใช้เช่น;"65"เนื่องจากอินพุตจาก STDIN จะเป็นสตริงเสมอ
Dennis

1
@Dennis Oh ขอบคุณที่ใช้งานได้ตอนนี้!
Beta Decay

2

Lua - 43 41 Bytes

for i=1,arg[1]do print(string.char(i))end

คุณสามารถย่อให้สั้นลงได้ด้วยไบต์a=""for i=1,arg[1]do print(a.char(i))end
Digital Veer

คุณสามารถย่อให้สั้นลงได้ 2 ไบต์for i=1,arg[1]do print(("").char(i))end
ทำงาน

2

Befunge 98, 22

&:00pv>0gk,@
0::-1<^j`

น่าเสียดายที่นี่นานมาก

&:00p        ; gets numerical input, stores a copy at cell (0,0)               ;
     v       ; IP goes down                                                    ;

     <       ; IP goes left, so I execute 1-::0`j^                             ;
 ::-1        ; (1-::) subtract one from our number and duplicate it twice      ;
0       `    ; (0`) compare the number with 0, push 1 if greater else 0        ;
     <^j     ; if the result was 0, go up, otherwise continue going left       ;

      >0gk,  ; get the value at cell (0,0), print that many numbers from stack ;
           @ ; terminate program                                               ;

2

Python 3.4 - 36 bytes / 43 bytes

print(*map(chr,range(int(input()))))
print(*map(chr,range(int(input()))),sep='')

อินพุต 255 ()

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

  1. รับช่วงสูงสุด
  2. สร้างช่วงของตาราง
  3. แม็พช่วงของฟังก์ชัน chr (รับค่า int ส่งคืน ascii)
  4. กินแผนที่ผ่านการขยายตัวอักษรแดง (หมายเลข -> ตัวละคร -> พิมพ์!)

อันที่สองเพิ่งลบช่องว่างที่แยกอักขระแต่ละตัวออกเพื่อแลกเปลี่ยนกับ 7 ไบต์


คุณสามารถทำให้มันเป็นแลมบ์ดาได้มากตามที่คำถามระบุไว้และใน Python 2 ให้mapส่งคืนรายการดังนั้นคุณสามารถทำได้f=lambda i:map(chr,range(i))
Justin

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

2

ปาสกาล 87

program _;var c:char;n:byte;begin n:=0;readln(n);for c:=chr(0)to chr(n)do write(c);end.

ปาสกาล 73

program _;var c,n:byte;begin readln(n);for c:=0to n do write(chr(c));end.

สร้างและทำงานได้ดีจากhttp://www.onlinecompiler.net/pascal


1
FreePascal (และถ้าฉันจำได้อย่างถูกต้อง Turbo Pascal ก็เช่นกัน) ต้องการเพียง 60 ตัวอักษรเหล่านี้: var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end. pastebin.com/aFLVTuvh
จัดการ

ค่อนข้างจะเป็นไปได้ฉันใช้เดลฟี่เท่านั้น แต่มีคนแก้ไขชื่อนั้น
Mark K Cowan

2

x86 ASM (Linux) (หลายไบต์เว้นแต่คุณจะรวบรวม)

เขียนเป็นฟังก์ชั่นสมมติว่าพารามิเตอร์ถูกส่งผ่านใน AX (ฉันลืมหมายเลขสำหรับ syscall อ่าน) นอกจากนี้ยังไม่รักษา [SP] หรือ BX

test ax,ax
jz @Done
mov [sp],ax
@Loop:
mov ax,4
mov bx,1
mov cx,sp
mov dx,1
int 0x80
sub [sp],1  ; Can I do this?  Or do I need to load/sub/store separately?
jnz @Loop
@Done:
ret

2
(ฉันควรจะเอาเปรียบ F00F ในนั้นมันไม่เหมือนใครจะเรียกใช้ต่อไป)
Mark K Cowan

7
ฉันจะเรียกใช้สิ่งนี้ ฉันจะไม่เรียกใช้ตอนนี้
Aearnus


2

ทับทิม, 23

f=->n{puts *?\0..n.chr}

คำอธิบาย

  • อินพุตถูกใช้เป็นอาร์กิวเมนต์สำหรับแลมบ์ดา คาดว่าจะเป็นจำนวนเต็ม
  • "โอเปอเรเตอร์การทำลายล้าง" ( *) จะเรียกใช้#to_aryบน Range เพื่อพิมพ์อักขระทุกตัวในบรรทัดของตัวเอง

2

Julia: 20 ตัวอักษร (REPL)

นี่ใกล้กับตัวอย่างของคำถาม: เพียงแค่สร้างตัวละครและให้ REPL ทำสิ่งที่ต้องการกับพวกเขา

f(n)=map(char,[0:n])

Julia: 33 ตัวอักษร

พิมพ์อักขระแต่ละตัวในบรรทัดแยกกัน

print(map(char,[0:int(ARGS[1])]))


2

T-SQL: 68 63

ในฐานะที่เป็นวงพิมพ์

DECLARE @i INT=64,@ INT=0A:PRINT CHAR(@)SET @+=1IF @<=@i GOTO A

T-SQL: 95 86

ในฐานะที่เป็นแบบสอบถาม

DECLARE @ INT=64SELECT TOP(@+1)CHAR(ROW_NUMBER()OVER(ORDER BY 0/0)-1)FROM sys.messages

แก้ไข: การเปลี่ยนแปลงและการแก้ไขที่ทำโดย Muqo ขอบคุณ แก้ไขและเล่นกอล์ฟแนะนำโดย @ t-clausen.dk


สำหรับลูปคุณสามารถบันทึกอักขระ 5 ตัวขึ้นไปเพื่อแปลง WHILE เป็น a GOTOพร้อมป้ายกำกับ สำหรับการค้นหาอาจระบุmsdb.sys.objectsเพื่อรับประกันวัตถุให้เพียงพอ นอกจากนี้มันจะไม่ส่งออก CHAR (0) ORDER BY @อย่างไรก็ตามในขณะที่คุณสามารถปลอบใจ
Muqo

คำตอบที่สองไม่ถูกต้อง คุณสามารถเขียนมันด้วยวิธีนี้และเล่นกอล์ฟ 9 ตัวละคร: DECLARE @ INT = 64SELECT TOP (@ + 1) CHAR (ROW_NUMBER () มากกว่า (เรียงตาม 0/0) -1) จาก sys.messages
t-clausen.dk

@ t-clausen.dk ไม่แน่ใจว่าฉันจะให้มันผ่านได้อย่างไร ขอบคุณสำหรับสิ่งนั้น
มิ

2

BrainFuck - 140 112 Bytes

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

ลองที่นี่!

ที่บันทึกไว้ 28 ไบต์โดยการเปลี่ยนไป[<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-][<<<->->->-]

มันทำอะไร

,>,>,>                                                              Takes three inputs
                                                                    in three separate cells

-[>+<-----]>---[<+>-]<[<<<->->->-]<                                 Takes 48 off of each to
                                                                    convert them to decimal

[>+<-]<[>>++++++++++<<-]<[>>>>++++++++++[<++++++++++>-]<<<<-]>>>    Combines them into a
                                                                    three digit number by
                                                                    multiplying the first
                                                                    by 100, the second by
                                                                    10 and then adding all
                                                                    three

[>.+<-]                                                             Repeatedly prints the
                                                                    value of the adjacent
                                                                    cell and then adds one
                                                                    to it until it reaches
                                                                    the input value.

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