รูปและพื้นดิน


32

รูปและพื้นดิน
ที่มา: Wikipedia

สำหรับความท้าทายนี้คุณควรเขียนสองโปรแกรมซึ่งมีลักษณะคล้ายกับรูปและพื้นดินของภาพดังกล่าวข้างต้นดังกล่าวว่าหนึ่งในพวกเขาพิมพ์และพิมพ์อื่นfiguregroundโดยเฉพาะ:

  1. figureเขียนโปรแกรมที่ใช้เวลาไม่ป้อนข้อมูลและพิมพ์สตริง อักขระช่องว่างที่อนุญาตเฉพาะในโปรแกรมของคุณคือช่องว่าง (รหัสจุด 0x20) และบรรทัดใหม่ (การขึ้นบรรทัดใหม่, 0x0D, linefeeds, 0x0A หรือการรวมกันของทั้งคู่)
  2. การไม่สนใจบรรทัดใหม่จำนวนของอักขระเว้นวรรค (รหัสจุด 0x20) และอักขระที่ไม่ใช่ช่องว่างจะต้องเหมือนกัน ตัวอย่างเช่นนี้จะเป็นโปรแกรมที่ถูกต้อง (ในภาษาสมมุติ):

    ab c 
       d
    e f
    

    โปรดทราบว่ามีช่องว่างต่อท้ายในบรรทัดแรก

  3. หากคุณสลับnอักขระช่องว่าง TH กับn TH อักขระที่ไม่ใช่ช่องว่างโปรแกรมควรพิมพ์groundแทน สำหรับตัวอย่างข้างต้นโปรแกรมจะมีลักษณะเช่นนี้:

      a b
    cde 
     f 
    

    โปรดทราบว่ามีช่องว่างต่อท้ายในบรรทัดที่สองและสาม

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

คุณอาจใช้ภาษาการเขียนโปรแกรมใด ๆแต่โปรดทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามตามค่าเริ่มต้น

นี่คือดังนั้นคำตอบที่สั้นที่สุดที่ถูกต้อง - วัดเป็นไบต์ - ชนะ

สคริปต์ตัวช่วย

คุณสามารถใช้สคริปต์ CJam นี้เพื่อแปลงระหว่างรูปและโปรแกรมภาคพื้นดิน เพียงวางหนึ่งในสองลงในฟิลด์อินพุตและเรียกใช้โปรแกรม นอกจากนี้ยังจะบอกคุณว่ามีจำนวนช่องว่างและไม่เว้นวรรคไม่ตรงกันหรือไม่

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

คำตอบ:


20

เยลลี่ 20 ไบต์

รูป

“¦ĠȮ“©ụd» Ṃ         

เก้าช่องว่างต่อท้าย ลองออนไลน์!

พื้น

         “ ¦ĠȮ“©ụd»Ṃ

ไม่มีช่องว่างต่อท้าย ลองออนไลน์!

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

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

ตัวอักษรสตริงใช้การบีบอัดสตริงในพจนานุกรมของเยลลี่เพื่อสร้างคำที่ต้องการ สตริงตัวอักษรที่บีบอัดเริ่มต้นด้วยลงท้ายด้วย»และใช้ภายในเพื่อสร้างอาร์เรย์ของสตริง

ในรูปโปรแกรม“¦ĠȮ“©ụd»ผลตอบแทนถัวเฉลี่ยคู่สตริง(“ตัวเลข”,“ดิน”)และอะตอมเลือกขั้นต่ำ lexicographical คือ“ตัวเลข”

ในโปรแกรมกราวด์“ ¦ĠȮ“©ụd»ให้ผลตอบแทนคู่สตริง(“ logicallyAbacs”,“ กราวด์”)แทน ค่าต่ำสุดของคำศัพท์ตอนนี้คือ"กราวด์"ซึ่งเลือกตามหน้าที่

ในทั้งสองกรณีล่ามจะพิมพ์ค่าส่งคืนล่าสุดโดยอัตโนมัติเช่นค่าต่ำสุดที่เลือก - ไปยัง STDOUT


14

Python 2, 53 ไบต์

แทนที่·ด้วยช่องว่างทั้งสองคำตอบ:

····················
print'······figureground'[6:12]#

figureพิมพ์

print'figureground'[
······6:12]#····················

groundพิมพ์


14

05AB1E , 15 14 ไบต์

รูป

 'ŠÂ,'í¶      

ลองออนไลน์!

พื้น

'       ŠÂ,'í¶

ลองออนไลน์!

ใช้การเข้ารหัสCP-1252 หมายเหตุช่องว่างต่อท้าย ในโปรแกรมFigureมันเป็นโปรแกรมปกติที่ไม่มีข้อผิดพลาด มันขยายคำต่อไปนี้:

'ŠÂ  ->  figure
'í¶  ->  ground

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

ในโปรแกรมกราวด์มีข้อผิดพลาดบางอย่างซึ่งสะดวกในกรณีนี้ ส่วนต่อไปนี้:

'<space>

ดันอักขระช่องว่างที่ด้านบนของสแต็ก Šหมุนสแต็คซึ่งมี arity 3 มีเพียงหนึ่งองค์ประกอบในสแต็กและไม่มีอินพุตดังนั้นสิ่งนี้จะให้ข้อยกเว้นการล้างสแต็ก Âbifurcates ด้านบนของสแต็ค แต่ตอนนี้มีเรื่องเดียวกับผู้ประกอบการหมุน ดังนั้นโดยพื้นฐานแล้ว,คำสั่งไม่พิมพ์อะไรเลย

'í¶นั่นหมายความว่าโปรแกรมจะยังคงส่งออกชั้นนำของสแต็คซึ่งเป็น groundผลในการเข้า


9

เรติน่า 31 ไบต์

รูป:

|       
รูป
 | พื้นดิน
      

พื้น:

 | รูป

|       
พื้น

รูปและพื้นดิน ทั้งสองโปรแกรมต้องการให้ STDIN ถูกปล่อยว่างเปล่าเพื่อให้เป็นรูปที่สมบูรณ์


9

Pyth, 30 ไบต์

รูป

"figure" "ground              

14 ช่องว่างต่อท้าย

ทดสอบ

พื้น

ไม่มีช่องว่างต่อท้าย

        "       figure""ground

ทดสอบ

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

ค่อนข้างมีประโยชน์พื้นที่พิมพ์ทับใน Pyth ในขณะที่ตัวอักษรสตริงที่ไม่มีการปิด"ถูกปิดโดยปริยาย

โปรแกรมแรกจึงประกอบด้วยสองสายและ"figure" "ground "สตริงแรกจะถูกพิมพ์โดยปริยายและการพิมพ์ของที่สองคือการปราบปรามซึ่งหมายความว่าเพิ่งfigureจะพิมพ์

โปรแกรมที่สองประกอบด้วยสองสายและ" figure" "ground"การพิมพ์ครั้งแรกจะถูกยกเลิกและที่สองคือการพิมพ์โดยนัยซึ่งหมายความว่าเพิ่งgroundพิมพ์


6

MATL , 37 ไบต์

โปรแกรมแรก

'figure'         
%x'ground'         

แต่ละบรรทัดมีช่องว่างต่อท้าย 9 ช่อง

ลองออนไลน์!

โปรแกรมที่สอง

    'figure'%
      x'ground'

ไม่มีที่ว่างสำหรับการวิ่งที่นี่

ลองออนไลน์!

คำอธิบาย

ไม่มีอะไรแฟนซีชะมัด ...

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

6

Java, 180 ไบต์

แทนที่.ด้วยช่องว่าง

พิมพ์ "รูป":

class
A{public
static
void
main(String[]a){System.out.println(
//"ground"
//
.....
........
......
....
...................................
..
........
..........
....
"figure");}}

พิมพ์ "กราวด์":

.....
........
......
....
...................................
..........
..
class
A{public
static
void
main(String[]a){System.out.println(
//
"ground"
//"figure"
);}}
............

5

Befunge ขนาด 54 ไบต์

รูป ( ลองออนไลน์! )

#v "erugif" v>
      : # _ @>         
"dnuorg"

สิบช่องว่างต่อท้ายในบรรทัดที่สอง

กราวนด์ ( ลองออนไลน์! )

  # v "erugif" v 
>: #, _ @> "dnuorg"
        

หนึ่งช่องว่างต่อท้ายในบรรทัดแรกและแปดช่องว่างในบรรทัดที่สาม


4

Mathematica, 50 34 ไบต์

ใช้สภาพแวดล้อม REPL (การเพิ่มPrint[]wrapper ที่มีจำนวนช่องว่างเท่ากันจะเพิ่มจำนวนไบต์ที่ 14) ทั้งสองโปรแกรมคือ

01figure+0 1ground                

(มีช่องว่างต่อท้าย 16 ช่อง) และ

          0       1figure+01ground

กุญแจสำคัญในที่นี้คือ Mathematica ปฏิบัติต่อการรวมกันของตัวเลขโดยไม่มีช่องว่างเป็นตัวเลขเดียว แต่ช่องว่างที่ถูกแทรกนั้นถูกตีความว่าเป็นการคูณด้วยเพื่อนบ้านเช่นเดียวกับการต่อตัวเลขและชื่อตัวแปรโดยพล ดังนั้นนิพจน์แรกประเมิน1*figure+0*1*groundว่าคือfigure; การแสดงออกที่สองประเมินซึ่งเป็น0*1*figure+1*groundground


4

PHP, 44 42 ไบต์

ภาพ: (16 ช่องว่างต่อท้าย 5 ช่องว่างระหว่างรูป &;)

echo''?ground:figure     ;                 

พื้นดิน: (20 ช่องว่างนำ)

                     echo' '?ground:figure;

ค่อนข้างเรียบง่ายใช้งานได้จริงเพราะ''เป็นเท็จและ' 'เป็นความจริง ใช้เช่น:

php -r "echo''?ground:figure     ;                "
php -r "                    echo' '?ground:figure;"

แก้ไข: 2 ไบต์ที่ชัดเจน retrospectively บันทึกขอบคุณ Martin Ender


3

Haskell, 96 94 88 82 77 ไบต์

โปรแกรมแรกพิมพ์"figure":

main              =          putStr$idid"ground"
idid    _          ="figure"

โปรแกรมที่สองพิมพ์"ground":

    main=putStr$id id"ground"                   
    idid _="figure"         

เรียกหนึ่งในสองฟังก์ชั่นค่าคงที่ชื่อแตกต่างกัน


3

Haskell, 88 65 ไบต์

main=putStr
...........--
.."figure"..........
--"ground"........

และ

...........
main=putStr..
--........"figure"--
.........."ground"

.ระบุช่องว่าง เพียงแสดงความคิดเห็นในบรรทัด (-> --) เล่นกล


3

Python 2, 52 ไบต์

........................
print"figure"
an
d
"ground"

.s หมายถึงช่องว่าง สามบรรทัดสุดท้ายจะถูกแยกออกเป็นข้อผิดพลาดโดยไม่ต้องมีบรรทัดSyntaxErrorซึ่งจะป้องกันไม่ให้โค้ดทำงานในตอนแรก

รุ่นกราวด์ใช้andเพื่อทำให้สตริงที่สองถูกพิมพ์


ทางเลือก (อีกต่อไป) ความพยายาม:

.......
print(#"ground")#
"figure")...................


print"figure"""and"ground"
.............
.............

3

JavaScript (ES6), 56 ไบต์

alert('figure'
                //&&'ground'
           )
              
alert('figure'//            
&&'ground') 

รูปไม่มีช่องว่างต่อท้าย


ฉันนับ 56 ไบต์สำหรับแต่ละโปรแกรมยกเว้นการขึ้นบรรทัดใหม่จะไม่นับ ฉันสงสัยว่ามันจะสั้นกว่านี้ไหม
ETHproductions

@ETHproductions อืมนั่นเป็นสิ่งที่เกิดขึ้นเมื่อคุณนับจำนวนไบต์ด้วยตนเอง :-(
Neil

2

Rail , 56 ไบต์

รูป

$'main'
 -[figure]o                
-          [ground]o

มีช่องว่างต่อท้าย 16 บรรทัดในบรรทัดที่สอง โปรแกรมสิ้นสุดลงพร้อมข้อผิดพลาด

ลองออนไลน์!

พื้น

       
$ 'main' - [รูป] o
 - [พื้น] o         

มีช่องว่าง 7 ช่องในบรรทัดแรกและช่องว่างต่อท้าย 9 ช่องในบรรทัดสุดท้าย โปรแกรมนี้ยังยุติด้วยข้อผิดพลาด

ลองออนไลน์!

คำอธิบาย

Rail ค้นหาบรรทัดที่ขึ้นต้นด้วย (สัญกรณ์ regex) \$.*'main'เพื่อค้นหาจุดเริ่มต้น รถไฟ (ตัวชี้คำแนะนำ) จากนั้นเริ่มต้นจากการ$เคลื่อนตะวันออกเฉียงใต้ สิ่งที่ไม่สามารถเข้าถึงได้โดยรถไฟสามารถถูกละเว้นได้อย่างสมบูรณ์สำหรับโปรแกรม ซึ่งรวมถึงสิ่งใดก็ได้ในบรรทัดเดียวกับจุดเริ่มต้น ตั้งแต่-ทางตะวันออกเฉียงใต้ของ$รถไฟหันไปทางตะวันออกทันทีโปรแกรมทั้งสองก็ลดลงเป็น:

 -[figure]o
 -[ground]o

[...]หมายถึงสตริงตัวอักษรและoพิมพ์ โดยปกติคุณต้อง a #เพื่อจบราง แต่ถ้าคุณไม่ใช้งานโปรแกรมจะยุติการทำงานต่อไป (แต่จะบ่นกับ STDERR ว่ารถไฟขัดข้อง)


2

> <> , 39 ไบต์

ใช้·เพื่อเป็นตัวแทนของช่องว่าง

รูป

v·
"·dnuo
e·
r·
u·
g··
i··
f···
"·
>·o·

ลองออนไลน์!

พื้น

·v
·"····
·d
·n
·u
·oe
·ru
·gif
·"
·>·o

ลองออนไลน์!

โปรแกรมทั้งสองจบลงด้วยข้อผิดพลาด

คำอธิบาย

โดยการเขียนรหัสในแนวตั้งฉันสามารถนำมาใช้ใหม่gและrระหว่างทั้งสองโซลูชั่นรวมทั้งคำพูดและ>และoสำหรับวงออก

ในทั้งสองกรณีบิตเดียวที่ได้รับการดำเนินการคือคอลัมน์ด้านล่างvซึ่งจะผลักดันตัวอักษรของคำที่ต้องการไปยังสแต็กในลำดับย้อนกลับ จากนั้น>เปลี่ยนเส้นทางตัวชี้คำสั่งไปทางขวาซึ่งจะวนซ้ำไปมาoโดยพิมพ์อักขระจนกระทั่งสแต็กว่างเปล่า


ฉันเพิ่งเริ่มทำงานด้วยตัวเอง> <> เวอร์ชั่นแล้วฉันก็เจอคุณ ฉันชอบความคิดของคุณในแนวตั้ง (ฉันเป็น 'ปกติ' มาก)
นกกระทุงนกเป็ดน้ำ

@Tealpelican ฉันไม่ได้คิดเรื่องนี้จนกว่าจะได้คำตอบฟิชชัน ก่อนหน้านั้นโซลูชันที่ดีที่สุดของฉัน> <> คือ 42 ไบต์: !__|"druong">o<"figure"(โดยที่_ช่องว่างและช่องว่างที่เหลืออยู่ตรงท้ายบรรทัด)
Martin Ender

เวอร์ชันปัจจุบันที่สั้นที่สุดของฉันคือ ## "de nr uu og ri GF"> o! ~ ~! <## ไหนตลก ๆ ก็พอ 42 ไบต์เช่นกัน! รุ่นก่อนหน้าของฉันมีการตรวจสอบข้อผิดพลาด แต่สามารถลดได้ถึง 53 ไบต์
นกกระทุงนกเป็ดน้ำ

2

ฟิชชัน , 37 ไบต์

ใช้·เพื่อเป็นตัวแทนของช่องว่าง

รูป

D·
"···
f··
i··
g·
u·
r·
e·ound
"·
;·

ลองออนไลน์!

พื้น

·D
·"fi
·gu
·re
·o
·u
·n
·d····
·"
·;

ลองออนไลน์!

คำอธิบาย

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


1

ไขว้กันเหมือนไบต์ 46

                      "ground""figure"" "?$$o;

ลองออนไลน์! งานพิมพ์groundนี้

"ground""figure"""?$$o                 ;      

ลองออนไลน์! งานพิมพ์figureนี้

พื้น

รหัสที่เกี่ยวข้อง:

"ground""figure"" "?$$o;
................          push these two strings
                " "?$     pop " " off (since " " is truthy, `?` executes `$`)
                     $    pop TOS ("figure")
                      o;  output and terminate

รูป

รหัสที่เกี่ยวข้อง:

"ground""figure"""?$$o;
................         push these two strings
                ""?$     doesn't activate
                    $    pop ""
                     o;  output and terminate

1

Brian & Chuck , 55 53 ไบต์

รูป

erugif?dnuorg             
}<.<.<.<.<.<.             

มี 13 ช่องว่างต่อท้ายในแต่ละบรรทัด

ลองออนไลน์!

พื้น

             erugif?dnuorg
             }<.<.<.<.<.<.

ลองออนไลน์!

คำอธิบาย

อ่าไม่นานแล้วตั้งแต่ครั้งล่าสุดที่ฉันใช้ Brian & Chuck เพื่อเป็นการย้ำเตือนสั้น ๆ ไบรอันและชัคเป็นสองอินสแตนซ์ที่เหมือน Brainfuck ซึ่งใช้ซอร์สโค้ดของกันและกันเป็นเทป เพียงโยนสามารถใช้คำสั่งพิมพ์., ?สวิทช์ระหว่างทั้งสองกรณีเงื่อนไขและ}เป็นประเภทชอบ[>]ใน brainfuck คำสั่งที่ไม่รู้จักจะถูกละเว้นเพียง

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

?   Switch control to Chuck.
}   GROUND PROGRAM ONLY: Move the tape head on Brian to the end of the tape.
<.  Move the tape head left and print the character there.
... Do the same another five times to print the remainder of the string.

0

WinDbg, 74 ไบต์

พื้น

                      ea2000000"      groundfigure";;;da       2000006  L6

รูป

ea2000000"groundfigure          ";;;da                  2000006       L6  

รูปที่มีช่องว่างต่อท้าย 2 ฉันรู้สึกว่าอย่างน้อย 2 หรือ 4 ไบต์ควรจะสามารถเล่นกอล์ฟได้ ...

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

* Ground:
ea 2000000 "      groundfigure";     * Write string "      groundfigure" starting at 2000000
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, from 2000006, ie- ground

* Figure:
ea 2000000 "groundfigure          "; * Write string "groundfigure          " to memory
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, ie- figure

เอาท์พุท:

0:000>                       ea2000000"      groundfigure";;;da       2000006  L6
02000006  "ground"
0:000> ea2000000"groundfigure          ";;;da                  2000006       L6  
02000006  "figure"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.