สร้าง; รหัส


36

เกี่ยวข้องกับ: Make a; # interpreter

;#ความท้าทายในการเชื่อมโยงดังกล่าวงานคือการสร้างล่ามภาษาลึกลับ

เรื่องของ;#ภาษา

ภาษามีสองคำสั่ง: ;และ#(ตัวแปลอื่น ๆ ทั้งหมดจะถูกละเว้น):

;: เพิ่มการสะสม

#: Modulo ตัวรวบรวมโดย 127 พิมพ์อักขระ ASCII ที่สอดคล้องกันและรีเซ็ตตัวสะสมเป็น 0

ท้าทาย

เพราะฉันขี้เกียจ แต่ก็ยังต้องการทดสอบ testcase อีกต่อไปฉันต้องการโปรแกรมหรือฟังก์ชันที่แปลงข้อความธรรมดาเป็น;#รหัส

อินพุต

อินพุตเป็นสตริงนำมาเป็นอาร์กิวเมนต์หรือผ่าน stdin มันจะมีเพียงตัวอักษร ASCII ที่พิมพ์ได้และการขึ้นบรรทัดใหม่

เอาท์พุต

เอาต์พุตเป็น;#โปรแกรมที่สร้างขึ้นโดยส่งคืนหรือพิมพ์ไปยัง stdout ตราบใดที่โปรแกรมนั้นถูกต้องมันอาจมีอักขระส่วนเกินนอกเหนือจาก#และ;อักขระอื่น ๆ ทั้งหมดจะถูกละเว้น

ตัวอย่าง

Input: Hello, World!
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#

Input: ABC
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#

Input: ;#
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#

ลีดเดอร์บอร์ด


9
ยอดเยี่ยม! ดีใจที่ได้เห็น # กำลังได้รับความสนใจ!
caird coinheringaahing

1
คุณสามารถทดสอบผลลัพธ์ของคุณได้ที่นี่เนื่องจาก; # + เป็น superset of; #
อดัม

3
เอาต์พุตสามารถมีอักขระเพิ่มเติมได้หรือไม่? ;#ละเว้นอักขระอื่น ๆ ทั้งหมดดังนั้นโปรแกรมที่สร้างขึ้นจะยังคงทำงานได้
เดนนิส

2
@ Benoît: ;โมดูลัสจะไม่เกี่ยวข้องเมื่อมีการสร้างรหัสเพราะมันมักจะง่ายต่อการสร้างรหัสที่ใช้จำนวนขั้นต่ำของ ประการที่สอง 127 ถูกต้องตามที่ระบุไว้ในคำถามที่เชื่อมโยงซึ่งมีข้อกำหนดของ; # language
Joey

2
มันไม่ได้เป็น transpiling จริงๆ "Generate #; code" เป็นชื่อที่ดีกว่า ฉันจะเปลี่ยนเป็นอย่างนั้น
Mego

คำตอบ:


49

; # + , 61 ไบต์

ถูกโค่นโดย Conor O'Brien

;;;;;;;(~;;;;;~-;-)~>:~;;;;(~;;;;;;~-;-)~>~-*((;~<#~):<#-:-*)

ลองออนไลน์!

โปรดทราบว่าอินพุตมีไบต์ null ต่อท้าย


12
คะแนนสำหรับสไตล์
Chowlett

1
ฉันเห็นด้วยกับคำตอบนี้: D แน่นอนภาษาที่เหมาะสมสำหรับงาน
Conor O'Brien

34

; # + , 40 ไบต์

;;;;;~+++++++>~;~++++:>*(-(;~<#~):<#-*:)

ลองออนไลน์! อินพุตถูกยกเลิกด้วย null null

คำอธิบาย

รหัสจะแบ่งออกเป็นสองส่วนคือการสร้างและการวนซ้ำ

รุ่น

;;;;;~+++++++>~;~++++:>

สิ่งนี้ทำให้ค่าคงที่;และ#อยู่ในหน่วยความจำเช่น:

;;;;;~+++++++>~;~++++:>
;;;;;                     set A to 5
     ~                    swap A and B
      +++++++             add B to A 7 times
                          (A, B) = (5*7, 5) = (35, 5)
             >            write to cell 0
              ~           swap A and B
               ;          increment A
                ~         swap A and B
                          (A, B) = (35, 6)
                 ++++     add B to A 4 times
                          (A, B) = (59, 6)
                     :    increment cell pointer
                      >   write to cell 1

การย้ำ

*(-(;~<#~):<#-*:)
*                    read a character into A
 (            * )    while input is not a null byte:
  -                  flip Δ
   (     )           while A != 0
    ;                decrement
     ~               swap A and B
      <              read ";" into A
       #             output it
        ~            swap A and B
           :         decrement cell pointer
            <        read "#" into A
             #       output it
              -      flip Δ
               *     take another character from input
                :    increment cell pointer

1
ทั้งหมดนี้มาจากภาษาตลกที่ฉันทำเมื่อฉันเบื่อ ฉันภูมิใจ
caird coinheringaahing

@RandomUser: D มันเป็นแนวคิดที่สนุกที่จะเล่นกับ
Conor O'Brien

ฮะ. ถ้าฉันต้องการให้โปรแกรมพิมพ์ไบต์ว่างใน #;
tuskiomi


@ ConorO'Brien ฉันจะป้อนข้อมูลนั้นในโปรแกรมของคุณอย่างไร
tuskiomi


12

เยลลี่ , 10 8 7 ไบต์

O”;ẋp”#

ลองออนไลน์!

O”;ẋp”#  Main Link
O        Map over `ord` which gets the codepoint of every character
 ”;ẋ     Repeat ';' the required number of times
     ”#  '#'
    p    Cartesian Product; this puts a '#' at the end of each element in the array

Implicit Output shows as a single string

-2 ไบต์ขอบคุณ @Emigna
-1 ไบต์ขอบคุณ @Dennis


คุณสามารถทำอะไรO”;ẋ;€”#แทน
Emigna

@Emigna อ่าขอบคุณ ฉันไม่เข้าใจวิธีการทำงาน แต่ฉันเข้าใจ ขอบคุณ!
HyperNeutrino

4
;€pจะกลายเป็น
เดนนิส

@Dennis Oh ฉันเข้าใจแล้วว่ามันทำงานยังไง ขอบคุณ! :)
HyperNeutrino

11

GS2 , 6 ไบต์

■•;2•#

ลองออนไลน์!

Hexdump แบบย้อนกลับได้ (xxd)

0000000: ff 07 3b 32 07 23                                ■•;2•#

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

■       Map the rest of the program over  all code points C of the input.
 •;         Push ';'.
   2        Multiply; repeat ';' C times.
    •#      Push '#'.

2
= อะไรห่า?
Erik the Outgolfer

1
2คำสั่งการคูณคืออะไร? GS2 แปลกประหลาด: P
ETHproductions

1
@EriktheOutgolfer เรียกใช้งานโค้ดสำหรับแต่ละจุดของรหัสอักขระ o_O
Mr. Xcoder

@EriktheOutgolfer ฟังดูแปลกกว่าที่เป็นอยู่ เป็นเพียงแผนที่และ GS2 ใช้สตริงเป็นรายการจำนวนเต็ม
Dennis

@ETHproductions GS2 ไม่ใช่ตัวละคร มันตีความซอร์สโค้ดเป็นสตรีมข้อมูลดิบและมักจะไม่มีการเชื่อมต่อระหว่างคำสั่งและอักขระ CP-437 ที่เข้ารหัสไบต์ ในรหัสไบต์ x86_64, 2เป็นแฮคเกอร์ ...
เดนนิส

10

แท๊กซี่ 779 ไบต์

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Chop Suey.Go to Chop Suey:n 1 r 1 l 4 r 1 l.[c]Switch to plan "e" if no one is waiting.Pickup a passenger going to Charboil Grill.Go to Charboil Grill:n 1 l 3 l 3 l.Pickup a passenger going to The Underground.Go to Writer's Depot:w 1 r.[p]; is waiting at Writer's Depot.Pickup a passenger going to Post Office.Go to Post Office:n 1 r 2 r 1 l.Go to The Underground:n 1 r 1 l.Switch to plan "n" if no one is waiting.Pickup a passenger going to The Underground.Go to Zoom Zoom:n 3 l 2 r.Go to Writer's Depot:w.Switch to plan "p".[n]# is waiting at Writer's Depot.Go to Writer's Depot:n 3 l 2 l.Pickup a passenger going to Post Office.Go to Post Office:n 1 r 2 r 1 l.Go to Chop Suey:n 1 r 1 l 4 r 1 l.Switch to plan "c".[e]

ลองออนไลน์!

Ungolfed:

Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to Chop Suey.
Go to Chop Suey: north 1st right 1st left 4th right 1st left.
[c]
Switch to plan "e" if no one is waiting.
Pickup a passenger going to Charboil Grill.
Go to Charboil Grill: north 1st left 3rd left 3rd left.
Pickup a passenger going to The Underground.
Go to Writer's Depot: west 1st right.
[p]
; is waiting at Writer's Depot.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st right 2nd right 1st left.
Go to The Underground: north 1st right 1st left.
Switch to plan "n" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Zoom Zoom: north 3rd left 2nd right.
Go to Writer's Depot: west.
Switch to plan "p".
[n]
# is waiting at Writer's Depot.
Go to Writer's Depot: north 3rd left 2nd left.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st right 2nd right 1st left.
Go to Chop Suey: north 1st right 1st left 4th right 1st left.
Switch to plan "c".
[e]

คำอธิบาย:

Pick up stdin and split it into characters.
Covert each character to ASCII.
Print ";" as you count down from that ASCII to zero.
Print "#".
Pickup the next character and repeat until done.

+1 ฉันรักภาษาเช่นนี้และ Mornington Crescent รหัสนั้นสวยงามมาก!
Karl-Johan Sjögren


9

Brainfuck, 43 ไบต์

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

ไบต์ Null ยกเลิกโปรแกรม

คำอธิบาย

+[+[<]>->++]          59 (semicolon) location 5
--[>--<+++++++]>-       35 (hash) location 7
<,[                     input location 6
    [   while input byte not 0
        <.>     print semicolon
        -       decrement input byte
    ]
    >.< print hash
,]  loop while input not null

มันเล็กอย่างน่าประทับใจสำหรับ Brainf * ck
MD XF

เกือบจะแข่งขันกับคำตอบของหลาม ประทับใจ
raddish0

7

Python 3 , 39 ไบต์

[print(";"*ord(s)+"#")for s in input()]

ลองออนไลน์!


2
for s in input():print(";"*ord(s)+"#")สั้นลงหนึ่งไบต์
ovs

1
@ovs ช่วงเวลานั้นเมื่อคุณคิดว่า list comprehension สั้นกว่า
Mr. Xcoder

1
ไม่ยอมรับสตริงที่มีการขึ้นบรรทัดใหม่ใช่หรือไม่
ทิม

5

> <> , 22 ไบต์

i:0(?;\"#"o
o1-:?!\";"

ลองออนไลน์หรือที่สนามเด็กเล่นปลา

อินพุตคือ STDIN, เอาต์พุตคือ STDOUT ใน> <> ตัวอักษรและรหัส ASCII เป็นสิ่งเดียวกันดังนั้นสิ่งที่เราต้องทำคืออ่านตัวอักษรพิมพ์";"และลดอักขระจนกว่าจะเป็น 0 จากนั้นพิมพ์"#"และวนซ้ำจนกว่าจะไม่มีอินพุตเหลืออีก


5

F #, 79 ไบต์

let c i=System.String.Join("#",Seq.map(fun c->String.replicate(int c)";")i)+"#"

ลองออนไลน์!

ขยาย

// string -> string
let convert input =
    System.String.Join(
        "#",      // join the following char seq with "#"
        input     // replicate ";" n times where n = ASCII value of char c
        |> Seq.map (fun c-> String.replicate (int c) ";") 
    ) + "#" // and add the last "#" to the output

การแปลงใช้สตริงอินพุตและเอาต์พุต a; # program

การใช้

convert "Hello, World!" |> printfn "%s"
convert "ABC" |> printfn "%s"
convert ";#" |> printfn "%s"

4
เราต้องการคำตอบ F # เพิ่มเติม
aloisdg พูดว่า Reinstate Monica

@aloisdg ฉันจะทำดีที่สุดของฉัน :)
Brunner


5

PowerShell, 29 27 25 ไบต์

$args|% t*y|%{';'*$_+'#'}

ตรงไปตรงมาสวย รับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง เอาต์พุตนั้นถูกต้อง; # โปรแกรมที่พิมพ์ข้อความที่ร้องขอ


จำเป็นต้องเข้าร่วมสตริงผลลัพธ์
mazzy

@mazzy: จากคำอธิบายของงาน: »ตราบใดที่โปรแกรมนั้นถูกต้องมันอาจมีตัวอักษรส่วนเกินที่นอกเหนือจาก#และ;ตัวอักษรอื่น ๆ จะถูกละเว้น«
Joey

ตามที่คุณต้องการ :-)
mazzy

สามารถลบเครื่องหมายคำพูดได้ $argsก็เพียงพอแล้ว
mazzy

เว้นแต่อาร์กิวเมนต์เป็นตัวเลข
Joey

4

brainfuck , 47 ไบต์

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

ลองออนไลน์!

ดูเพิ่มเติม: คำตอบของ ovsซึ่งใช้วิธีการที่คล้ายกัน แต่ด้วยวิธีการต่าง ๆ ในการสร้างค่าคงที่และเค้าโครงของเซลล์ที่แตกต่างกัน


คำอธิบาย:

ความท้าทายนี้สอดคล้องกับข้อมูลจำเพาะของสมองที่ค่อนข้างดีซึ่งหมายความว่าวิธีแก้ปัญหาเป็นเรื่องเล็กน้อย Brainfuck รับอินพุตเป็นค่า ASCII ซึ่งเป็นค่าที่แน่นอน # ต้องส่งออกเป็น

แผนผังสำหรับการ transpiling นั้นง่าย: สร้างค่า ASCII สำหรับ;และ#พิมพ์;เท่ากับค่า ASCII ของอักขระอินพุตพิมพ์#ทำซ้ำสำหรับทุกอินพุต

+++++++[-             7
         >++++++++       * 8 = 56
         >+++++<<        * 5 = 35 (#)
       ]>+++<                  56 + 3 = 59 (;)
,[                    Input into first cell
  [>.<-]              Print ;'s equal to ASCII input
  >>.<<,              Print one #
 ]                    End on EOF

-2 Bytesเท่านั้น -1 ถ้าคุณหลีกเลี่ยงเซลล์ลบ
Jo King

4

Mathematica, 49 ไบต์

StringRepeat[";",#]<>"#"&/@ToCharacterCode@#<>""&

คำอธิบาย

ป้อนคำอธิบายรูปภาพที่นี่

แปลงสตริงอินพุตให้เป็นรายการของรหัสอักขระจากนั้นMapฟังก์ชันStringRepeat[";",#]<>"#"&เหนือรายการจากนั้นStringJoinส่งผลลัพธ์ด้วยสตริงว่าง


ทำไมคุณต้องการ<>""?
CalculatorFeline

@CalculatorFeline ถ้าไม่มีมันฉันจะเหลือรายชื่อของสตริงสำหรับตัวละครแต่ละตัว StringJoining ( <>) สตริงว่างเชื่อมแต่ละสตริง
ngenisis

ลืมเกี่ยวกับสิ่งนั้น: P
เครื่องคิดเลข

3

Aceto , 19 ไบต์

เนื่องจากมีล่ามใน Acetoฉันจึงคิดว่ามี outta เป็นคำตอบสำหรับความท้าทายนี้เช่นกัน มันเข้ากันได้ดีกับเส้นโค้งของฮิลแบร์ตลำดับที่ 2:

\n;*
'o'p
`!#'
,dpO

ก่อนอื่นเราอ่านตัวอักษรตัวเดียว ( ,) และทำซ้ำและคัดค้านเพื่อทดสอบว่าเป็นบรรทัดใหม่ ( d!หรือไม่เมื่ออ่านบรรทัดใหม่ตัวอักษรว่างจะถูกผลักลงบนสแต็ก) จากนั้นฉันจะใช้สิ่งที่ฉันคิดว่าเป็นเคล็ดลับที่ฉลาดพอที่จะจัดการกับกรณีขึ้นบรรทัดใหม่ดาน:

`'\n

ถ้าค่าในกองเป็นTrue(เราอ่านบรรทัดใหม่) รหัสที่หมายถึง: ไม่ ( `) ใส่ตัวอักษรตัวอักษรบนสแต็ค ( ') \nซึ่งเป็นบรรทัดใหม่:

หากค่าบนสแต็กคือFalse(เราไม่ได้อ่านบรรทัดใหม่) รหัสนั้นหมายถึง: ไม่ ( `) อ่านตัวอักษรตามตัวอักษร ( ') นั่นหมายความว่าตัวละครต่อไปจะถูกดำเนินการเป็นคำสั่ง โชคดีที่แบ็กสแลชหนีคำสั่งถัดไป (มันทำให้มันไม่ได้รับการดำเนินการ) ดังนั้นnอย่าพิมพ์ newline (ซึ่งเป็นสิ่งที่nมักจะทำ)

ส่วนที่เหลือของรหัสตรงไปตรงมา; เราแปลงอักขระบนสแต็กเป็นจำนวนเต็มของ unicode codepoint ( o) เรากดเซมิโคลอนตัวอักษร ( ';) คูณจำนวนด้วยสตริง ( *เช่นใน Python), print ผลลัพธ์, กดตัวอักษร ( ') #, print it เหมือนกันและกลับไปที่ต้นOกำเนิด

ทำงานด้วย-Fหากคุณต้องการเห็นผลลัพธ์ทันที (เพราะการบัฟเฟอร์) แต่ก็สามารถทำงานได้โดยไม่ต้องทำเช่นกัน


3

Perl, 24 ไบต์

s/./";"x(ord$&)."#"/ges

perl -peทำงานด้วย

ทางเลือกอื่น ๆ :

say";"x ord,"#"for/./gs

perl -nEทำงานด้วย


3

ปลอบใจ 11 ไบต์

เย้ภาษาใหม่

';@jx{'#}Ep

คำอธิบาย

';           Push the code point of ';' (59).
  @j         Push the entire input as a list of code points.
    x        For each code point in the input, repeat 59 that many times.
     {  }E   For each resulting list of 59s:
      '#      Push the code point of '#' (35).
          p  Flatten and print as unicode characters.



3

JavaScript, 55 54 51 50 48 ไบต์

s=>1+[...s].map(c=>";".repeat(Buffer(c)[0])+"#")

ลองออนไลน์

  • 1 ไบต์บันทึกขอบคุณที่นีล

ทางเลือก

หากเราสามารถรับข้อมูลเป็นอาร์เรย์ของตัวละครแต่ละตัวแล้ว 5 ไบต์สามารถบันทึก

a=>1+a.map(c=>";".repeat(Buffer(c)[0])+"#")

หากเราสามารถส่งออกเป็นอาร์เรย์ก็สามารถบันทึกได้อีก 2 ไบต์

a=>a.map(c=>";".repeat(Buffer(c)[0])+"#")

\n;;;;;;;;;;#ควรจะกลายเป็น
Neil

อืม ... มันแปลก เดาว่าฉันจะต้องย้อนกลับไปที่ทางออกที่ยาวกว่าดังนั้น ขอบคุณ @ นีล
Shaggy

2
ฉันคิดว่าคุณสามารถเปลี่ยน.เป็น[^]ซึ่งจะยังคงเป็นไบต์ที่สั้นกว่าmap/joinหรือไม่
Neil

Yup ที่ได้งานที่ @Neil :)
ปุย

เพียงแค่หัวขึ้นjoin()ในคำตอบของคุณก่อนหน้านี้ได้รับไม่จำเป็นข้อกำหนดสำหรับ;#, และคุณยังสามารถประกาศว่าการป้อนข้อมูลสำหรับการทำงานของคุณมีอาร์เรย์ของตัวอักษรแม้ว่าข้อเสนอแนะที่สองเป็นบิตของการยืด ไม่ว่าจะด้วยวิธีใดก็ตามนั่นจะทำให้คุณมีขนาดไม่เกิน 48 ไบต์
Patrick Roberts


2

APL (Dyalog)ขนาด 18 ไบต์

'#',¨⍨';'⍴¨⍨⎕UCS

ลองออนไลน์!

⎕UCS แปลงเป็นจุดโค้ด Unicode

';'⍴¨⍨ ใช้จุดรหัสแต่ละจุดเพื่อปรับแต่ง ( = RhoR ; R eshape) เครื่องหมายอัฒภาค

#',¨⍨ ผนวกแฮชต่อท้ายแต่ละสตริง


2

Ruby, 28 25 ไบต์

24 ไบต์บวกสวิตช์บรรทัดคำสั่งที่จะดำเนินการซ้ำแล้วซ้ำเล่า-nstdin

$_.bytes{|b|$><<?;*b+?#}

บันทึกแล้ว 3 ไบต์ (และแก้ไขในบรรทัดใหม่!) ด้วยการจัดการ


คุณสามารถหลีกเลี่ยงการใช้โดยการทำงานโดยตรงกับรหัสตัวอักษร:.ord $_.bytes{|b|$><<?;*b+?#}มีความแตกต่าง: อันนี้เข้ารหัสบรรทัดใหม่ในอินพุต ไม่แน่ใจว่าสิ่งที่เจ้าของคำถามตั้งใจที่จะพูดโดย“ มันจะมีเพียงตัวอักษร ASCII ที่พิมพ์ได้และขึ้นบรรทัดใหม่” แต่สำหรับฉันเสียงเหมือนขึ้นบรรทัดใหม่ควรจะเข้ารหัสเช่นกัน
จัดการ

Ruby-fu ของคุณเหนือกว่าฉัน @manatwork - ฉันลืมไปbytesแล้ว ฉันถาม OP เกี่ยวกับการขึ้นบรรทัดใหม่ด้านบนและจะแก้ไขในภายหลัง
Chowlett


2

อลิซ 12 ไบต์

'#I.h%&';d&O

ลองออนไลน์!

คำอธิบาย

'#    Push 35, the code point of '#'.
I     Read a code point C from STDIN. Pushes -1 at EOF.
.h%   Compute C%(C+1). For C == -1, this terminates the program due to division
      by zero. For C > -1, this just gives back C, so it does nothing.
&';   Pop C and push that many 59s (the code point of ';').
d     Push the stack depth, which is C+1.
&O    Print that many code points from the top of the stack.
      The IP wraps around to the beginning and another iteration of this
      loop processes the next character.




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