ฉัน! n! s! E! R! T! n!! ข! E! T! W! E! E! n!


24

โพสต์จากที่นี่

ความท้าทายนี้เป็นอย่างมาก "กลั่น" จากนี้คำถาม ขอขอบคุณเป็นพิเศษที่ @Akababa!

ในงานนี้คุณควรแทรกเครื่องหมายอัศเจรีย์ที่จุดเริ่มต้นของสตริงและหลังอักขระทุกตัว

กฎระเบียบ

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

ตัวอย่าง

  • มีการขึ้นบรรทัดใหม่ 4 บรรทัดในเครื่องหมายตกใจ 5 บรรทัด มันยากมากที่จะใส่ข้อความนี้เป็นข้อความมาร์กดาวน์ดังนั้นจึงมีการระบุไว้แทน
1 2 3 4 5 6
129591 129012 129127 129582

0

เอาท์พุท

! 1! ! 2! ! 3! ! 4! ! 5! 6!
! 1! 2! 9! 5! 9! 1! 1 2 9 0 1! 2! ! 1! 2! 9! 1! 2! 7! ! 1! 2! 9! 5! 8! 2!
!
0!
asd afjoK ak: e
kPrLd
    fOJOE;
    KFO
KFkepjgop sgpaoj faj

เอาท์พุท

! เป็นคนแรก! s! d! !! f! J! o! K! ! เค:! E!
!! k P! R! L! d!
! ! ! ! ! ฉ O J O E!!!!!!!
! ! ! ! ! K! F! O!
! K! F! k! E! P! J! g! o! P! ! s! g! P! เป็นคนแรก! o! ญ! ! ! ! ฉ! เป็นคนแรก! ญ!

กรณีทดสอบพื้นฐานที่มีอักขระเพียงตัวเดียว:



เอาท์พุท

! เป็นคนแรก!

(ป้อนอัตโนมัติ! เพียงล้อเล่นไม่มีสิ่งนั้น) มีเครื่องหมายอัศเจรีย์:

!!
!!
!!
!!
!!

ขาออก:

!!!!!
!!!!!
!!!!!
!!!!!
!!!!!


7
ฉันไม่เข้าใจ downvote จริง ๆ - นี่เป็นความท้าทายที่ชัดเจนและเป็นลายลักษณ์อักษร Re: การซ้ำซ้อน - ไม่ใช่ (ก่อนหน้า '!' สร้างความแตกต่างใหญ่) และฉันไม่เชื่อว่ามีใครแนะนำเช่นนั้น (ไม่มีการลงคะแนนอย่างใกล้ชิด)
Jonathan Allan

1
หากภาษาไม่สามารถบอกความแตกต่างระหว่างa\nและaเราจำเป็นต้องมีการขึ้นบรรทัดใหม่หรือไม่?
จูเซปเป้

13
Downvotes ถูกแทรกระหว่างทุก upvote เช่นเดียวกับสิ่งที่ challege อธิบาย
A

2
นี่มันตายแล้ว
V. Courtois

คำตอบ:



12

Python 3 , 27 ไบต์

lambda s:f"!{'!'.join(s)}!"

ลองออนไลน์!

สุจริตฉันหวังว่าบางคนสามารถแสดงให้ฉันเห็นวิธีที่ยอดเยี่ยมในการทำสิ่งนี้ด้วยจำนวนไบต์ที่น้อยลง


นี่ไม่ได้จัดการกับตัวพิมพ์บรรทัดว่างอย่างถูกต้อง
สะเก็ด

@flakes คุณหมายถึงอะไร หากคุณหมายถึงสตริงว่าง: เราไม่จำเป็นต้องจัดการสตริงว่าง (และไม่คำนึงถึงผลลัพธ์นี้!!ในกรณีนั้นซึ่งเป็นสิ่งที่สมเหตุสมผลสำหรับฉัน) ถ้าคุณหมายถึงสตริง\n: !\n!มันไม่เนื่องจากการส่งออกที่ถูกต้องคือ
Jonathan Allan

3
@JAD เท่าที่ฉันเห็นมันไม่มีสตริงว่างเปล่าในตัวอย่าง ไม่เพียงแค่นั้น แต่กฎข้อแรกระบุว่า "จะมีอินพุตสตริงที่ไม่ว่างเสมอ"
Reinstate Monica

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

1
codegolf.stackexchange.com/questions/190223/insert-nbetween/…ขณะที่คุณกำลังบอกว่าจะแสดงทางที่สั้นกว่า
U10- ส่งต่อ - Reinstate Monica


10

เรติน่า 0.8.2 , 2 ไบต์


!

ลองออนไลน์! ในที่สุดความท้าทายที่ Retina มีในตัว!


1
จริงๆแล้วฉันสร้างความท้าทายนี้โดยใช้จอประสาทตาในตัว
A


-1ไบต์ใน QuadR
A

2
@A__ ใช่ฉันลืมเกี่ยวกับคุณสมบัตินั้น ( หากมีเพียงหนึ่งบรรทัดที่ไม่ใช่ฟังก์ชั่น… ) คุณอาจต้องการพิจารณาเครื่องหมายถูกอีกครั้ง
อดัม



8

JavaScript (ES6), 19 ไบต์

รับอินพุตเป็นอาร์เรย์ของอักขระ

s=>`!${s.join`!`}!`

ลองออนไลน์!


JavaScript (ES6),  23  20 ไบต์

บันทึก 3 ไบต์ขอบคุณ @ShieruAsakoto

รับอินพุตเป็นสตริง

s=>[,...s,,].join`!`

ลองออนไลน์!


JavaScript (ES6), 22 ไบต์

แนะนำโดย@tjjfvi

รับอินพุตเป็นสตริง

s=>s.replace(/|/g,"!")

ลองออนไลน์!



@tjjfvi ดีหนึ่ง!
Arnauld

5
ฉันมี 20 สำหรับ 23 ของคุณ:s=>[,...s,,].join`!`
Shieru Asakoto

7

R , 25 ไบต์

function(x)gsub("","!",x)

ลองออนไลน์!

ฟังก์ชั่นการรับและส่งกลับเวกเตอร์ตัวละคร


สามารถโกนได้ 3 ไบต์โดยการเปลี่ยนรูปแบบฟังก์ชั่นเป็นscan(,'')เช่นtio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/ …
Sumner18 18

@ Sumner18 ขอบคุณ ฉันเริ่มต้นด้วยสิ่งนั้น แต่มันแยกอินพุตที่ช่องว่าง
Nick Kennedy

1
@ Sumner18 ความท้าทายขอให้จัดการกับการป้อนข้อมูลด้วยบรรทัดใหม่ซึ่งไม่สามารถทำได้scan(แต่โซลูชันของ Nick นั้นจัดการได้อย่างน้อยถ้าคุณแสดงผลลัพธ์ด้วยcat)
Robin Ryder

7

รหัสเครื่อง 8086, รูปแบบ. COM (MS-DOS 2+), 32 ไบต์

(-1 ขึ้นอยู่กับโปรแกรมจำลอง: ดูด้านล่าง)

เพื่อผลลัพธ์ที่ดีที่สุดจะเปลี่ยนเส้นทางอินพุตมาตรฐานจากไฟล์เนื่องจากการพิมพ์ให้เอาต์พุตที่ดูแปลก ๆ ขึ้นบรรทัดใหม่ดูแปลก ๆ หน่อย ๆ เพราะมันถูกเก็บไว้เป็นส่วนหนึ่งCR LFและทำให้เกิดความCRสับสน

โปรแกรมนี้ทำงานได้ดีในการจำลอง MS-DOS จริง (เช่น PCjs) แต่ DOSBox ดูเหมือนจะมีปัญหากับ Ctrl + Z EOF (ดูความคิดเห็นในรายการแอสเซมบลี) ดังนั้นอย่าพยายามป้อนข้อมูลโดยใช้คอนโซลใน DOSBox เว้นแต่ว่าคุณ เพิ่มการตรวจสอบพิเศษ!

BB 01 00 53 59 BA 0B 01 B4 40 CD 21 4A 4B B4 3F CD 21 85 C0 74 09 B4 40 43 41 CD 21 49 EB EE C3

บิตที่น่าสนใจ:

  • ฉันบันทึกข้อมูลพื้นที่บางส่วนโดยนำหน่วยความจำที่ได้รับการดำเนินการอยู่แล้ว (คน21HในINT 21Hที่จะเกิดขึ้น!)

  • ฉันเกือบจะสามารถใช้เคล็ดลับที่น่าสนใจที่ฉันพบในหน้า"พลังที่ซ่อนอยู่ของคำแนะนำ BCD"ซึ่งจะทำให้ฉันสามารถใช้AAAแทนมาตรฐานTESTเพื่อเปรียบเทียบALกับ 0 ประหยัดหนึ่งไบต์ น่าเสียดายที่เอกสารนี้ยังไม่ครบถ้วนดังนั้นฉันจึงไม่สามารถไว้วางใจได้ตัวอย่างเช่น PCjs ไม่ได้ปรับอะไรนอกจากธงพกพาและพกพา :-(

รหัสการประกอบ (โหมดอุดมคติ TASM):

IDEAL
MODEL   TINY

CODESEG
ORG 100H

;; DOSBox (tested with 0.74-2) didn't seem to handle Ctrl-Z as EOF
;; so uncomment the ";;" lines to run it there.
MAIN:
    MOV     BX,1
    PUSH    BX
    POP     CX
    MOV     DX,OFFSET MAIN_1+1  ; The 21H in INT 21H
    MOV     AH,40H
MAIN_1:
    INT     21H
    DEC     DX
    ;;PUSH  DX
    ;;POP   SI
IO_LOOP:
    DEC     BX
    MOV     AH,3FH
    INT     21H
    ;;; This should work on an non-emulated PC. 
    ;;;AAA      ; AL=0?
    TEST    AX,AX
    JZ      DONE
    ;;CMP   [BYTE PTR SI],1AH
    ;;JZ    DONE
    MOV     AH,40H
    INC     BX
    INC     CX
    INT     21H
    DEC     CX
    JMP     IO_LOOP
DONE:
    RET
ENDS
END MAIN


6

Pepe , 47 ไบต์

REREEeRErEErREeeEeeeeEREEeeREEeereeREEEEeeEReee

ลองออนไลน์!

คำอธิบาย:

REREEeRE # Push 0,then input (str),then 0 -> (R)
         # The zeroes are pushed to correct the inserting
rEE # Begin loop labelled 0 -> (r)
  rREeeEeeeeE # Push "!" -> (R)
              # r flag inserts it instead of pushing
  REEeeREEee # Move pointer pos 2 steps forward -> (R)
ree # Loop while (R) != 0
REEEEeeE # Remove characters of (R) that are in stack of (r)
         # Removes the 0 in (R)
Reee # Output (R)

คุณเขียนรหัสนี้อย่างไร มีตัวแปลงรหัสที่คุณใช้หรือไม่? ดูเหมือนจะบ้าและลองเขียน
Cruncher

1
@Cruncher 1) ฉันใช้สิ่งนี้เป็นแนวทางของฉัน 2) ไม่ฉันไม่ใช้โปรแกรมแปลงรหัสฉันแค่ใช้คำแนะนำในการเขียนรหัส
u_ndefined

6

เขาวงกต ,  19 11 10  9 ไบต์

33
..
",@

ลองออนไลน์!

อย่างไร?

เราเข้าสู่ Labyrinth ที่มุมซ้ายบนทางขวาด้วยศูนย์ที่ไม่มีที่สิ้นสุด ...

                         I / O    stack
                                  0,0,0,...
3 - pop * 10 + 3                  3,0,0,0,...
  - 2 neighbours, forward
3 - pop * 10 + 3                  33,0,0,0,...
  - 2 neighbours, forward
. - pop & print chr          !    0,0,0,...
  - T junction from the side
  -   TOS==0, forward
, - read chr or -1       L        76,0,0,0,...   or   -1,0,0,0
  - T junction from the base
  -   if TOS > 0 right:
" -     no-op                     76,0,0,0,...
  -     2 neighbours, forward
. -     pop & print chr      L    0,0,0,...
  -     T junction from the side
  -       TOS==0, forward
3 -       ...back to the start
  -   elif TOS == -1 left:
@ -     exit                                          we're out!


  * right, but on the first occasion (from above) we hit the wall and turn
    around, so that's like a left

โชคดีที่เราไม่จำเป็นต้องจัดการกับสิ่งที่ไม่สามารถพิมพ์ได้มิฉะนั้นศูนย์แรกจะหันมา,เล่นและทำลายล้าง


5

sed , 12 ไบต์

s/\b\|\B/!/g

ลองออนไลน์!

-3 ไบต์ขอบคุณ Cows Quack


จริงๆแล้วรหัส Sed นั้นมีแค่ 15 ตัวอักษร: ลองออนไลน์! .
จัดการ

เยี่ยมมากขอบคุณ ฉันยังไม่ชัดเจนว่ามันทำงานอย่างไร ...
โยนาห์

1
s/\b\|\B/!/gสามารถใช้งานได้ 12 ไบต์
Kritixi Lithos

@ Cowquack ขอบคุณ อัปเดต
โยนาห์


4

Perl 5 -p0, 17 6 ไบต์

s,,!,g

ลองออนไลน์!

คำตอบของฉันคือเดิมและ-p $_='!'.s,.,$&!,grขอบคุณ @Nahuel Fouilleul สำหรับการตัด 11 ไบต์และ @Grimy สำหรับคำ-p0แนะนำ



1
@NahuelFouilleul -lpให้ผลลัพธ์ที่ไม่ถูกต้องสำหรับ\n\n\n\nกรณีทดสอบ (ส่งคืน 4 บรรทัดที่คั่นใหม่!แทนที่จะเป็น 5 ที่ระบุ) -p0ทำงานอย่างถูกต้อง
Grimmy

4

6502, 12 ไบต์ (13 ไบต์หาก Apple II)

6502

รหัสเครื่องสันนิษฐานว่าคู่ตำแหน่งศูนย์หน้าเชื่อมต่อกับอินพุตอักขระ ($ FE) และฮาร์ดแวร์เอาต์พุต (FF) ระบบที่ใช้ 6502 หลายระบบจะช่วยอำนวยความสะดวกในการใช้ I / O ในลักษณะนี้แม้ว่าที่อยู่ I / O จะไม่อยู่ในศูนย์

เพื่อความง่ายฉันใช้Py65ระบบจำลองไมโครคอมพิวเตอร์ 6502 ที่เขียนด้วย Python

นี่คือการถ่ายโอนข้อมูลหน่วยความจำจาก Py65 คุณสามารถโหลดรหัสต่อไปนี้ได้ทุกที่ในหน้าศูนย์ซึ่งจะไม่ทับซ้อนกับ $ FE และ $ FF

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.mem 0:b
0000:  a9  21  85  ff  a5  fe  f0  fc  85  ff  d0  f4

ทำงานในหน้าต่างคำสั่งของ Windows คุณสามารถวาง (Ctrl + V) ข้อความใด ๆ ที่คุณต้องการหรือพิมพ์ได้ง่ายๆ หากพิมพ์ให้กด Ctrl + J เพื่อขึ้นบรรทัดใหม่ (อักขระ ASCII เดียวกัน) กด Ctrl + C เพื่อขัดจังหวะตัวประมวลผลและกลับไปที่พรอมต์คำสั่ง Py65

รหัสแอสเซมบลีนั้นง่ายต่อการอ่าน

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.d 00:0b
$0000  a9 21     LDA #$21
$0002  85 ff     STA $ff
$0004  a5 fe     LDA $fe
$0006  f0 fc     BEQ $0004
$0008  85 ff     STA $ff
$000a  d0 f4     BNE $0000

เพื่อความชัดเจนนี่คือรหัสการประกอบในรูปแบบCBA65

; ASSEMBLE:
; cba65 bangit
;
; LOAD/RUN
; python3 py65/monitor.py -i 00fe -o 00ff -l bangit.bin
; goto 0000

        .FILES  BIN=256

; I/O LOCATIONS
GETC    .EQU    $FE             ; (1) MOVING PY65'S GETC TO ZP SHAVES 1 BYTE
PUTC    .EQU    $FF             ; (1) MOVING PY65'S PUTC TO ZP SHAVES 2 BYTES

        .ORG    $0000

VROOM   LDA     #'!'
        STA     PUTC
VROOM2  LDA     GETC
        BEQ     VROOM2
        STA     PUTC
        BNE     VROOM

        .END

Apple II

รหัสข้างต้นถือว่าเป็นโมฆะแสดงว่าไม่มีอินพุตดังนั้นให้ทำการสำรวจต่อไปจนกว่าจะส่งคืนค่าที่ไม่เป็นโมฆะ

สำหรับการเปรียบเทียบ Apple I และ Apple II ส่งสัญญาณความพร้อมใช้งานของอักขระใหม่โดยการตั้งค่าบิต 7 ของที่อยู่ I / O ของแป้นพิมพ์ซึ่งจะต้องถูกล้างหลังจากเรียกอักขระ บนระบบเหล่านั้นอักขระ I / O มักจะดำเนินการโดยเรียกรูทีนการมอนิเตอร์ระบบแทนการเข้าถึงฮาร์ดแวร์โดยตรง

ด้วยการเรียก RDKEY ($ FD0C) และ COUT ($ FDED) แอปเปิ้ลที่เทียบเท่ากับที่กล่าวมาสามารถเข้ารหัสใน 13 ไบต์และสามารถรันได้ทุกที่ใน RAM นี่คือรหัสที่ฉันใช้ในโปรแกรมจำลองแอปเปิ้ล // e, a2ixบน Android 9

การกด Return มีผลเช่นเดียวกับการขึ้นบรรทัดใหม่

*300L

0300-   A9 A1       LDA   #$A1
0302-   20 ED FD    JSR   $FDED
0305-   20 0C FD    JSR   $FD0C
0308-   20 ED FD    JSR   $FDED
030B-   F0 F3       BEQ   $0300

คุณสังเกตเห็นว่าแทนที่จะใช้ค่า ASCII ปกติ # $ 21 สำหรับเครื่องหมายอัศเจรีย์จะใช้ # $ A1 แทนหรือไม่ นั่นเป็นเพราะการส่งค่า ASCII มาตรฐานไปยัง COUT ทำให้พวกเขาแสดงใน "โหมดผกผัน" ดำบนพื้นขาว การแสดง ASCII ในสีขาวปกติบนพื้นดำต้องเพิ่ม # $ 80 ลงในค่าตัวอักษรในแอคคูเลเตอร์ก่อนเรียก COUT เนื่องจาก RDKEY ส่งคืนอักขระด้วยชุด hi-bit โดยทั่วไปแล้วแอสเซมบลีโปรแกรมจะทำการล้างบิตของอักขระเพื่อรับค่า ASCII ก่อนที่จะใช้


1
ยินดีต้อนรับสู่เว็บไซต์! :)
Rahul Bharadwaj

ขอบคุณ @Rahul!
lee

4

Bash , 36 ไบต์

while read -n1 c;do printf \!$c;done

ลองออนไลน์!

สิ่งนี้ขึ้นอยู่กับบรรทัดใหม่ที่ยกเลิกอินพุตสำหรับสุดท้าย! เครื่องหมาย.


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

@ mbomb007 ขอบคุณสำหรับตัวชี้
spuck

1
น่าเสียดายที่สิ่งนี้ไม่ได้เพิ่ม!ในตอนท้ายของอินพุต
Kritixi Lithos

@Cowsquack: ใน terminal ของฉันขึ้นบรรทัดใหม่ที่ยุติการป้อนข้อมูลที่ได้รับ! ที่เพิ่ม บน tio.run อินพุตจะต้องถูกยกเลิกด้วยการขึ้นบรรทัดใหม่ ฉันได้อัปเดตลิงก์ไปยังลองใช้ออนไลน์เพื่อแสดงว่า
spuck

4

MarioLANG , 95 94 90 89 69 ไบต์

++++++
======< >)
>+++++++",+[
=======<.==<
>+++++++!(.-
========#===

ลองออนไลน์!

ครั้งแรกที่ทดลองใช้ MarioLANG นั่นสนุกมาก!

ขอบคุณJo Kingสำหรับ -20 ไบต์

คำอธิบาย:

MarioLANG ถูกสร้างขึ้นเพื่อดำเนินการเหมือนเกมของ Super Mario Bros มันทำงานคล้ายกับ BF โดยมีหน่วยความจำจัดเรียงไว้ในเทปเซลล์ มีโอเปอเรเตอร์ที่จะเพิ่มขึ้นลดลงพิมพ์ (เป็น ASCII หรือตัวเลข) และอ่านไปยังเซลล์หน่วยความจำปัจจุบันและผู้ประกอบการเพื่อเลื่อนไปทางซ้ายหรือขวาตามเทป

Mario (ตัวชี้คำสั่ง) มักจะเริ่มต้นในเซลล์ซ้ายบนของโปรแกรมโดยมีทิศทางการเคลื่อนไหวที่ตั้งไว้ทางด้านขวา หากมาริโอไม่มีวัตถุคล้ายพื้นอยู่ข้างใต้เขา (=, "หรือ #) เขาจะล้มลงจนกว่าเขาจะไปถึงวัตถุคล้ายพื้นถ้ามาริโอออกจากพื้นที่โปรแกรมโปรแกรมจะสิ้นสุดลงเนื่องจาก Game Over :(

โปรแกรมเฉพาะนี้โดยทั่วไปสามารถแบ่งออกเป็นสองครึ่ง: การตั้งค่าและการวนซ้ำ

   Setup                          Loop
-----------------------------------------------
                       |
++++++                 |          
======<                |          >)
>+++++++               |          ",+[
=======<               |          .==<
>+++++++               |          !(.-
========               |          #===

ในส่วนการตั้งค่าเราเพียงแค่เพิ่มหน่วยความจำเซลล์แรกจนกว่าจะถึง 33 - ค่า ASCII สำหรับ "!" ง่ายพอ ถ้าสิ่งนี้สามารถเล่นกอล์ฟได้มันเป็นเรื่องของรูปทรงอย่างหมดจด มาริโอเริ่มจากด้านบนซ้ายหยิบเหรียญ 10 เหรียญเริ่มตกลงมาเมื่อหยิบขึ้นมาครั้งที่ 11 เปลี่ยนทิศทางจากนั้นทำซ้ำ เขาหยิบเหรียญ 11 ใบสุดท้ายโดยไม่สลับทิศทาง เขาจบส่วนการตั้งค่าที่ด้านล่างขวา "+"

ในส่วนวนรอบมาริโอเริ่มต้นด้วยการเข้าถึงลิฟต์ "!" ผู้ประกอบการทำให้เขาหยุดการเคลื่อนไหวเพื่อให้เขายังคงอยู่ในลิฟต์ ในทางขึ้นมันพิมพ์อักขระ ASCII ที่สอดคล้องกับค่าของเซลล์หน่วยความจำปัจจุบัน (อันนี้มีค่า 33, "!") จากนั้นสลับไปยังเซลล์ถัดไปในหน่วยความจำ มาริโอถึงด้านบนและกำหนดทิศทางของเขาไปทางขวา เขาตกหล่นและอ่านอักขระจากอินพุตเป็นค่า ASCII (หรือ -1 ถ้าไม่มีอักขระ) เราเพิ่มขึ้นเนื่องจากมาตรการควบคุมเพียงอย่างเดียวใน MarioLANG คือการข้ามคำสั่งถ้าเซลล์หน่วยความจำปัจจุบันมีค่าเป็น 0 ถ้าใช่เราข้ามการเปลี่ยนทิศทางของมาริโอดังนั้นเขาจะเดินออกจากชั้นถัดไปสู่การลงโทษของเขา หากไม่เป็นเช่นนั้นเราจะกำหนดทิศทางไปทางซ้าย การเดินจากพื้นด้านล่างลดเซลล์ปัจจุบันกลับไปเป็นค่าก่อนหน้า


รุ่นก่อนหน้า (89 ไบต์):

+++++++++++>,
==========@"+
+++++++++++)[
@==========.==<
+++++++++++!(.-
===========#===

62 bytesโดยใช้ loop multiplication แทนที่จะเป็นตัวนับ
Jo King

โอเคตอนนี้เจ๋งแล้ว ฉันจะอัปเดตทันทีที่ฉันมีเวลาที่จะทำซ้ำคำอธิบายขอบคุณมัด!
Reinstate Monica

1
Aha! 60 ไบต์โดยการคูณ 5 * 6 + 3 แทน 8 * 4 + 1
Jo King

ผู้ชายฉันรู้ว่ามันไม่ใช่โรดิโอเครื่องแรกของคุณ แต่นี่ช่างน่าประทับใจจริงๆ xD
Reinstate Monica

ที่จริงแล้วนี่เป็นครั้งแรกที่ฉันเล่นกอล์ฟ MarioLANG ฉันเพิ่งมีประสบการณ์กับสมองและภาษา 2D อื่น ๆ
โจคิง

4

Perl 6 , 16 11 ไบต์

{S:g/<(/!/}

ลองออนไลน์!

แทนที่การจับคู่ความกว้างศูนย์ทั้งหมดด้วยเครื่องหมายอัศเจรีย์ ไม่อนุญาตให้ใช้ regexes แบบ Null ดังนั้นเราจึงใช้ตัวทำเครื่องหมายการจับเพื่อจับอะไรเลย





3

สามเหลี่ยม , 15 13 ไบต์

B\3;#*~.,</@<

ลองออนไลน์!

-2 ไบต์หลังจากจำได้ว่ารูปสามเหลี่ยมมีตัวดำเนินการหยุดแบบมีเงื่อนไข

ฉันเชื่อว่าสิ่งนี้จะสั้นที่สุดเท่าที่จะเป็นไปได้ สามเหลี่ยมจะมีผู้ประกอบการทิศทางการเปลี่ยนแปลงเงื่อนไข แต่พวกเขาโชคไม่ดีที่ทำงานแตกต่างกันกว่าเงื่อนไขอื่น ๆ ในขณะที่คนอื่น ๆ ทั้งหมดตรวจสอบว่า ToS <= 0 เงื่อนไขทิศทางที่เปลี่ยนแปลงตรวจสอบ ToS! = 0 หากครั้งนี้มีไม่ได้กรณีที่เราจะมี 10 Bq3~#*/@<<ไบต์ในรูปแบบของ

Ungolfed:

    B
   \ 3
  ; # *
 ~ . , <
/ @ <
----------------------------------------------------
B3*              - Push 11 and 3, then pop both and push their product.
    <,<          - Change directions 3 times (to save 2 bytes on last line)
        @/       - Print Top of Stack value as a character, do not pop
          ~;\    - Push a character from input to ToS. Halt if ToS <= 0. Change Direction.
              #  - Print ToS as a character and pop

รุ่นก่อนหน้า (15 ไบต์):

B.3\.*#).(/?~@<

3

SimpleTemplateขนาด 23 ไบต์

นี่คือภาษาที่ฉันเขียนและมันควรจะเป็นเทมเพลต แต่ก็ดี

!{@eachargv.0}{@echo_}!

ควรจะอธิบายได้ด้วยตนเองเกือบเมื่อคุณเห็นรหัสที่ไม่ได้รับการอวด:

!{@each argv.0 as char} {@echo char}!{@/}

และคำอธิบาย:

  • !- พิมพ์ตัว!อักษร
  • {@each argv.0 as char}- วนรอบอักขระทุกตัวโดยตั้งค่าเป็นตัวแปรchar( เป็นทางเลือกตัวแปรเริ่มต้นคือ_)
    argv.0เป็นพารามิเตอร์แรกที่ส่งผ่านไปยังrender()เมธอดของคอมไพเลอร์
  • {@echo char}!- ส่งออกcharตัวแปรและตัว!อักษร
    สำหรับเวอร์ชั่น golfed _จะใช้ตัวแปรเริ่มต้นแทน
  • {@/}- ปิดลูป ( ไม่จำเป็น )

โซลูชันSimpleTemplate ของ Pure :

{@fn x}!{@eachargv.0}{@echo_}!{@/}{@/}

สร้างฟังก์ชั่นxที่ส่งออกผลลัพธ์เดียวกัน

คุณสามารถใช้สิ่งนี้:

{@call x "this is an example"}

คุณสามารถลองทั้งหมดนี้ได้ที่: http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa

On line ที่ 908 คุณสามารถใช้ตัวแปร$golfed, $ungolfedและ$fnในการทดสอบทุกรุ่น



อย่างไรก็ตามหากได้รับอนุญาตให้ใช้อาเรย์อักขระรหัสนั้นจะง่ายขึ้น (20 ไบต์):

!{@echoj"!" argv.0}!

และไม่ดี

!{@echo separator "!" argv.0}!

โดยทั่วไป outputs รายการทั้งหมดในอาเรย์เข้าร่วมโดยล้อมรอบด้วยตัวอักษร"!" เนื่องจากข้อ จำกัด ในคลาสคอมไพเลอร์พื้นที่มีผลบังคับใช้ (ในเวอร์ชัน golfed)!

รหัสนี้ยังยากมากที่จะใช้ในSimpleTemplateบริสุทธิ์(ใช้ฟังก์ชั่นเป็นตัวอย่าง):

{@fn x}!{@echoj"!" argv.0}!{@/}

{@// alternative: @call str_split into a "a char array"}
{@set a "a", " ", "c", "h", "a", "r", " ", "a", "r", "r", "a", "y"}

{@call x a}

@callสามารถเรียกฟังก์ชั่นที่มีอยู่ใน PHP, ซึ่งหมายความว่ามันไม่ได้เป็นที่บริสุทธิ์SimpleTemplateวิธีการแก้ปัญหา



2

Gema , 11 ตัวอักษร

\A=\!
?=?\!

น่าเสียดายที่!เริ่มแสดงความคิดเห็นใน Gema ดังนั้นจึงต้องหลบหนี

วิ่งตัวอย่าง:

bash-5.0$ echo -ne '1 2 3 4 5 6\n129591 129012 129127 129582\n\n0' | gema '\A=\!;?=?\!'
!1! !2! !3! !4! !5! !6!
!1!2!9!5!9!1! !1!2!9!0!1!2! !1!2!9!1!2!7! !1!2!9!5!8!2!
!
!0!

ลองออนไลน์!


2

เยลลี่ 5 ไบต์

Ż”!ṁż

โปรแกรมเต็มรูปแบบที่รับสตริงซึ่งพิมพ์ผลลัพธ์

ลองออนไลน์!

อย่างไร?

Ż”!ṁż - Main Link: list of characters, s   e.g. "abc"
 ”!   - character '!'                           '!'
   ṁ  - mould like:
Ż     -   s with a zero prepended              "!!!!"
    ż - zip together with s                    ["!a","!b","!c",'!']
      - implicit (smashing) print              !a!b!c!


2

Japt , 4 ไบต์

rP'!

ลองมัน

Japtap -P , 7 ไบต์

น่าเสียดายที่!เป็นอักขระที่สงวนไว้ซึ่งจำเป็นต้องมีเครื่องหมายคำพูด

ï'! i'!

ลองมัน

ไม่มากที่จะอธิบาย: ïเป็นผลิตภัณฑ์คาร์ทีเซียนและiเตรียม


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