การเอาชนะขนาดคลัสเตอร์


37

เบื่อกับความน่าเชื่อถือของการจัดเก็บแฟลชคุณตัดสินใจที่จะจัดเก็บโปรแกรมทั้งหมดของคุณในหนึ่งในผู้ดี 1,440 KiB floppies อย่างไรก็ตามหลังจากคัดลอกโปรแกรมไม่ถึง 3,000 โปรแกรมดิสก์ก็เต็ม เป็นไปได้ยังไง? มีทักษะในการเขียนโค้ดกอล์ฟอย่างที่คุณเป็นส่วนใหญ่โปรแกรมของคุณมีความยาวไม่เกิน 100 ไบต์ดังนั้นควรเหลือพื้นที่เหลืออีกมาก ...

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

ซื้อฟลอปปี้เพิ่มเติมหรือไม่ ไม่! ขนาดกลุ่มจะมีปัญหาน้อยลงหากเราบันทึกหลาย ๆ โปรแกรมไว้ในไฟล์เดียวซึ่งเป็นไปได้เพราะคอมไพเลอร์ / ล่ามที่แตกต่างกันจะทำงานแตกต่างกันสำหรับซอร์สโค้ดเดียวกัน

งาน

เขียนรูปหลายภาษาที่เหมาะกับในคลัสเตอร์เดียว (512 ไบต์หรือน้อยกว่า) และแก้ไขงานต่อไปนี้ให้ได้มากที่สุด

  1. อ่านอินพุตทั้งหมดและพิมพ์

  2. พิมพ์Hello, World! .

  3. อ่านบรรทัด / อาร์กิวเมนต์ ( ชื่อ ) เป็นอินพุตและพิมพ์สุขสันต์วันเกิด [ชื่อ]! .

  4. อ่านอินพุตทั้งหมดและพิมพ์ฉันรักแท็บ! ถ้ามันมีหนึ่ง tabulators อย่างน้อยหนึ่ง (0x09) และฉันเกลียดช่องว่าง! ถ้าไม่ได้

  5. อ่านสองบรรทัด / อาร์กิวเมนต์และพิมพ์ค่าความจริงหากสตริงที่สองเป็นซับสตริงของค่าแรกและค่าเท็จถ้าไม่

  6. อ่านบรรทัด / อาร์กิวเมนต์และพิมพ์ค่าความจริงหากอักขระอยู่ในลำดับจากน้อยไปหามากและค่าเท็จถ้าไม่

  7. อ่านบรรทัด / อาร์กิวเมนต์และตัวอักษรและพิมพ์ดัชนีของเหตุการณ์ทั้งหมดของตัวละครนั้น

  8. อ่านบรรทัด / อาร์กิวเมนต์และพิมพ์อักขระใด ๆ ที่มีจำนวนครั้งสูงสุด

  1. อ่านจำนวนเต็มสองจำนวนระหว่าง0ถึง255และพิมพ์ผลรวม

  2. อ่านจำนวนเต็มเดียวระหว่าง0และ255และพิมพ์ผลหารและกากของฝ่ายตนโดย7

  3. อ่านจำนวนเต็มเดียวระหว่าง1ถึง255และพิมพ์ค่าจริงถ้าเป็นตัวเลขคอมโพสิต (ไม่ใช่ 1 หรือเฉพาะ) และค่าเท็จถ้าไม่

  4. อ่านจำนวนเต็มเดียวระหว่าง1ถึง255และพิมพ์ค่าจริงถ้ามันเป็นกำลังของ 2 และค่าเท็จถ้าไม่

  5. อ่านจำนวนเต็มสองจำนวนระหว่าง0ถึง255และพิมพ์ค่าที่ใหญ่กว่า

  6. อ่านจำนวนเต็มทศนิยมระหว่าง0ถึง255พิมพ์การแสดงเลขฐานสิบหก

  7. อ่านจำนวนเต็มเดียวระหว่าง0ถึง255และพิมพ์น้ำหนัก Hamming (จำนวน 1 บิต)

  8. อ่านจำนวนเต็มเดียวnระหว่าง1และ13และพิมพ์F nที่n TH จำนวนฟีโบนักชี

    ตัวอย่างเช่นสำหรับการป้อนข้อมูลที่พิมพ์13233

  1. อ่านบรรทัด / อาร์กิวเมนต์ของอินพุตและใส่กรอบ

    ตัวอย่างเช่นสำหรับอินพุตProgramming Puzzles & Code Golfพิมพ์สิ่งนี้:

    +---------------------------------+
    | Programming Puzzles & Code Golf |
    +---------------------------------+
    
  2. อ่านบล็อกสี่เหลี่ยมของตัวละครและหมุนหนึ่งในสี่ตามเข็มนาฬิกา

    ตัวอย่างเช่นสำหรับการป้อนข้อมูล

    tye
    xll
    epb
    tma
     id
     sa
    s e
    i r
    hsn
    Tiu
    

    พิมพ์นี้:

    This  text
    is  simply
    unreadable
    
  3. อ่านจำนวนเต็มระหว่าง1และ40และพิมพ์เพชรของความยาวด้านข้างว่า

    ตัวอย่างเช่นสำหรับอินพุต3พิมพ์สิ่งนี้:

      /\
     /  \
    /    \
    \    /
     \  /
      \/
    
  4. พิมพ์สิ่งนี้:

    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    

เกณฑ์การให้คะแนน

คำตอบที่จัดการเพื่อรวมจำนวนสูงสุดของโปรแกรมในไฟล์เดียวที่เหมาะกับคลัสเตอร์ 512 ไบต์เดียวที่ชนะ ความสัมพันธ์จะหักตามจำนวนไบต์ (ต่ำกว่าดีกว่า)

กฎเพิ่มเติม

  • สำหรับแต่ละงานที่คุณอ้างสิทธิ์ในคะแนนของคุณไฟล์เดียวกัน (ไบต์ต่อไบต์) จะต้องประกอบด้วยโปรแกรมเต็ม - ในภาษาที่คุณเลือก - ซึ่งจะแก้ปัญหาเฉพาะงานนี้

  • แต่ละงานจะต้องมีการแก้ไขในภาษาที่แตกต่างกัน

    ภาษานับว่าแตกต่างกันหากไม่ใช่ภาษาเดียวกัน ตัวอย่างเช่นมีเพียงหนึ่ง JavaScript, Python หนึ่งและหนึ่ง TI-BASIC แต่ C, C ++, Octave และ MATLAB เป็นสี่ภาษาที่แตกต่างกัน

  • ภาษาที่เลือกสำหรับแต่ละงานมีการตอบสนองความหมายของเราตามปกติของการเขียนโปรแกรมภาษา

    นอกจากนี้ภาษาต้องได้รับการเผยแพร่และนำไปใช้ก่อนวันที่ 9 กันยายน 2558

  • คอมไพเลอร์ / ล่ามของคุณอาจไม่ต้องการแฟล็กที่ไม่ได้มาตรฐานใด ๆ

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

  • อินพุตสำหรับแต่ละงานจะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้ (0x20 ถึง 0x7E) และ linefeeds (0x0A) และจะมีความยาวไม่เกิน255ไบต์

  • จำนวนเต็มทั้งหมดสามารถอ่านได้ในรูปทศนิยมหรือไม่เป็นเอกภาพเว้นแต่จะระบุไว้เป็นอย่างอื่นในงาน

  • พฤติกรรมสำหรับการป้อนข้อมูลที่ไม่ถูกต้องจะไม่ได้กำหนด

  • คุณสามารถอ่านอินพุตจาก STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด) หรือเป็นอาร์กิวเมนต์บรรทัดคำสั่ง

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

    หากหนึ่งในอินพุตชิ้นเป็นบรรทัดตัวคั่นที่เป็นไปได้เท่านั้นคือตัวป้อนบรรทัด

  • พิมพ์เอาต์พุตไปที่ STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด) เอาต์พุตทั้งหมดไปยัง STDERR จะถูกละเว้น

  • สำหรับแต่ละภารกิจจะใช้กฎการเขียนมาตรฐาน

    โดยเฉพาะอย่างยิ่งสิ่งนี้รวมถึงช่องโหว่ที่ถูกห้ามโดยค่าเริ่มต้นยกเว้นการเข้ารหัสฮาร์ดโค้ดเอาต์พุตซึ่งได้รับอนุญาตอย่างชัดเจนสำหรับความท้าทายนี้


1
JavaScript และ CoffeeScript แตกต่างกันมากพอที่จะถือว่าเป็นภาษาที่แตกต่างกันหรือไม่?
Downgoat

ใช่นับเหล่านั้นแตกต่างกัน
เดนนิส

17
ความท้าทาย # 4 ของคุณไร้สาระ> :(
Doorknob

อ้างอิง: ผลลัพธ์ทั้งหมดไปยัง STDERR จะถูกละเว้น นี่หมายความว่าเมื่อเราเรียกสคริปต์ / โปรแกรมด้วย2>/dev/nullและรับเอาต์พุตที่ถูกต้องเพื่อ stdout มันก็โอเค? เพียงเพื่อให้แน่ใจ
Cabbie407

2
@ Cabbie407 แม่นยำ ตามฉันทามติเกี่ยวกับเมตากฎนี้ใช้จริงกับความท้าทายทั้งหมดตามค่าเริ่มต้น ฉันแค่ต้องการทำให้แน่ใจว่าทุกคนตระหนักถึงมัน
Dennis

คำตอบ:


17

12 ภาษา, 418 ไบต์

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
 \@-[I love tabs!]o#
  \ >qi---@
( @-[ ]e<''';print hex(
input())#-[I hate spaces!]o#"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"))?(!?)
'''=#print(([1 1;1 0]^int(readline()))[1,2])
#=
Tr is here.
>Tr, Hello, World!
>X Tr
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#=#.91<0#'''#";

นี่คือความท้าทายที่สนุก มันยากที่จะใส่ภาษาให้มากขึ้น แต่ด้วยจำนวนไบต์ที่เหลือฉันอาจทำอีกหนึ่งอย่างได้

ทำให้การใช้ภาษา 2D ฟรี โปรดทราบว่าถ่านในระหว่างที่[ ]อยู่บน@-[ ]e<เส้นเป็นแท็บ นอกจากนี้ต้องใช้การ\nสิ้นสุดบรรทัดเพื่อให้ TRANSCRIPT ทำงาน

โหมโรง (ภารกิจ 1 / แมว)

( 
      )?(!?)

?(!?)เป็นเพียงการแปลโดยตรงในภาษา,[.,]BF พรี()ลูดลูปทำตัวเหมือน[]ลูปBF ดังนั้นทุกอย่างจาก(ในคอลัมน์ด้านซ้ายสุดไปจนถึง)ก่อนที่โปรแกรมหลักจะไม่ทำงาน

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

ตรวจสอบให้แน่ใจว่าNUMERIC_OUTPUTได้ตั้งค่าไว้Falseหากคุณใช้ล่าม Python

TRANSCRIPT (ภารกิจ 2 / สวัสดีชาวโลก)

Tr is here.
>Tr, Hello, World!
>X Tr

TRANSCRIPT เป็น esolang ใจความตามนิยายแบบโต้ตอบ บรรทัดที่ TRANSCRIPT ไม่รู้จักจะถูกละเว้นทำให้ง่ายต่อการติดตั้ง

Tr is here.ประกาศตัวแปรสตริงและบรรทัดที่สองกำหนดเนื้อหาของตัวแปรที่จะTr ( สำหรับการตรวจสอบ) จากนั้นส่งออกสตริงHello, World!X TrX

แม้ว่า TRANSCRIPT นั้นง่ายต่อการติดตั้ง แต่มันเป็นภาษาที่ค่อนข้างละเอียดดังนั้นฉันจึงทำให้มันเป็นความท้าทายที่ง่ายที่สุด

การแยกส่วน (งาน 3 / ข้อความวันเกิด)

R"Happy Birthday, "[?S"!"*
                   \!/

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

Rail (ภารกิจ 4 / แท็บ)

$'main'
 \@-[I love tabs!]o#
  \ >qi---@
  @-[ ]e<
         -[I hate spaces!]o#

เช่นเดียวกับฟิชชัน Rail คือภาษา 2D ที่มีความได้เปรียบในการเคลื่อนที่ไปรอบ ๆ ได้ทุกที่ การดำเนินการจะเริ่มต้นจาก$ของmainฟังก์ชั่นทางตะวันออกเฉียงใต้มุ่งหน้าไป

ก่อนอื่นเรามุ่งหน้าไปที่\s, เลี้ยวซ้ายที่-, กดปุ่ม[<tab>]ซึ่งผลักแท็บ e<จากนั้นแตกกิ่งตาม EOF - ถ้า EOF เราหัวลงและพิมพ์"I hate spaces!"ก่อนหยุด ถ้าเรามุ่งหน้าไปข้างบนเราอ่านอักขระตัวถัดไปและเปรียบเทียบกับแท็บการแยกอีกครั้ง - หากแท็บหัวขึ้นและพิมพ์"I love tabs!"ก่อนที่จะหยุดพัก

โปรแกรมนี้ค่อนข้างแพง แต่เนื่องจาก TRANSCRIPT ใช้เวลา Hello World มันยากที่จะเลือกและทำงานที่เหมาะสมสำหรับ Rail

> <> (งานที่ 6 / อินพุตจากน้อยไปมาก)

"1\"#      \""" "" "


>0[0>i:0(?v:{)?v0n;
       ;n1< .95<


        .91<

พิมพ์1ถ้าน้อยไปหามากอย่าง0อื่น

> <> เป็นภาษา 2D อีกภาษาหนึ่งและการดำเนินการจะเริ่มจากด้านบนซ้าย "..."เป็นโหมดสตริงผลักตัวอักษรภายในครั้งละหนึ่งตัว หลังจากสตริงแรกที่เราตี#ซึ่งสะท้อนถึง IP ทางซ้ายผลักสตริงเพิ่มเติมและล้อมรอบ (> <> เป็น toroidal) ก่อนที่จะกดปุ่ม\กระจกที่สะท้อนเราขึ้นไป

ที่ด้านล่างของโปรแกรมคือ.91<สิ่งที่ teleport เราไป(9, 1)ที่โปรแกรมหลักคือ หลังจากสิ่งนี้0[ลบขยะทั้งหมดออกจากสตริง0กดศูนย์เพื่อแทนการอ่านถ่านครั้งสุดท้ายและหลังจากนี้มันก็อ่าน chars ทีละครั้งเพื่อให้แน่ใจว่าเรายังคงขึ้น

อาจดีกว่าที่จะย้ายโปรแกรมหลักลงแทนการส่งผ่านทางไกล แต่ฉันจะจัดการกับเรื่องนี้ในภายหลังหากจำเป็น

Befunge (ภารกิจ 9 / การเพิ่ม)

"1\"# &&+.@

ทดสอบกับล่ามพบที่นี่ นี่เป็นโปรแกรมที่ค่อนข้างตรงไปตรงมาพร้อมกับการเริ่มต้นเล่นสตริงที่ไร้ประโยชน์และ#กระโดดข้ามอวกาศ &&+.@หลังจากนั้นก็เป็นเพียงโปรแกรมหลัก

เขาวงกต (ภารกิจ 10 / Divmod 7)

"1
 =
 '
 <
""'("']
 ?
 :_7/!\_7%!@

สะดวก'และ"เป็น NOPs ในเขาวงกตซึ่งทำหน้าที่เหมือนเส้นทางเดินในเขาวงกต ฉันจะข้ามการนำทางที่ยุ่งเหยิง แต่โดยทั่วไปมีการหมุนจำนวนมากและเดินไปรอบ ๆ ก่อนที่เราจะตี?ซึ่งเป็นจุดเริ่มต้นของโปรแกรมหลัก

โปรแกรมไม่ได้ถูกลบทิ้งเหลือไว้สำหรับ Prelude (เช่น?อ่านอินพุตใน Prelude)

Python 2 (ภารกิจ 14 / เลขฐานสิบหก)

"1\"# &&+.@\""" "" "
#=
''''
xxx
xxx''';print hex(
input())#xxx
'''
xxx
xxx'''#";

xxxs แทนส่วนที่ไม่เกี่ยวข้องแสดงความคิดเห็นโดยสตริงหลายบรรทัดหรือความคิดเห็น ในระหว่างนั้นคือprint hex(input())แกนโปรแกรม ผลลัพธ์นี้มีการนำ0xหน้า แต่ฉันคิดว่าไม่เป็นไร (ถ้าไม่เป็นเช่นนั้น

บรรทัดแรกคือสตริง"1\"# &&+.@\""ตามด้วยสอง" "s สตริงทั้งสามนี้ต่อกันโดย parser และไม่ได้ใช้งาน (บรรทัดแรกนี้ทำงานคล้ายกันกับ Ruby และ Julia ในภายหลัง)

GolfScript (งาน 15 / น้ำหนักแฮมมิง)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}

บรรทัดแรกพุชสามสตริงและบรรทัดที่สองเป็นความคิดเห็น ''''เพิ่มสตริงอีกสองสตริงจากนั้น<<เปรียบเทียบสองสตริง( sถูกละเว้น) ในที่สุดก็""'("'กดอีกสองสาย

ทั้งหมดนี้เป็นขยะจะถูกลบออกแล้วโดยการห่อในอาร์เรย์และรับองค์ประกอบแรก ( ]0=) ซึ่งเป็นข้อมูลเริ่มต้นในสแต็ค แล้วเราจะประเมินการป้อนข้อมูลที่มีการ~เปิดเข้าไปในไบนารีด้วยแล้วสรุปบิตด้วย2base {+}*รายการถัดไป}นั้นไม่มีใครเทียบได้และให้ความเห็นพิเศษกับโปรแกรมที่เหลือ

Julia (ภารกิจ 16, Fibonacci)

"1\"# &&+.@\""" "" "
#=
xxx
xxx=#print(([1 1;1 0]^int(readline()))[1,2])
#=
xxx
xxx=#.91<0#xxx

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

Ruby (ภารกิจ 17 / เฟรม ASCII)

"1\"# &&+.@\""" "" "
#=
''''
<<s
xxx
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#xxx

โปรแกรมนี้อนุมานว่าอินพุตไม่ได้จบลงด้วยการขึ้นบรรทัดใหม่

เรามีสตริงที่ไร้ประโยชน์แสดงความคิดเห็นและสตริงที่ไม่มีประโยชน์อีกแล้ว heredoc ซึ่งแสดงความคิดเห็นส่วนใหญ่ของโปรแกรม หลังจากนั้นเป็นโปรแกรมหลักตามด้วย#ความคิดเห็นบรรทัดเดียว

CJam (ภารกิจ 19 / เพชร)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("xxx
"
R"xxx"[?S"!"*"
xxx
xxx"ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"xxx
xxx
xxx";

สตริงอวกาศสองรายการที่ท้ายบรรทัดแรกคือเพื่อตอบสนอง CJam เนื่องจาก#=เป็นตัวดำเนินการไบนารีสองตัว ฉันจะไม่ลงรายละเอียดมากเกินไปกับอันนี้ แต่โดยทั่วไปมันเป็นเรื่องยุ่งเหยิงด้วยโปรแกรมหลักที่เป็นเพียง

ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>

ในระหว่าง.

ตัวสร้างความแตกต่างที่สำคัญระหว่าง GolfScript และ CJam คือใน CJam คำพูดเดียว'ไม่ได้เริ่มต้นและสิ้นสุดสตริง แต่แทนที่จะผลักดันตัวละครต่อไปในสแต็ค ซึ่งหมายความว่าใน CJam

'("'

กด a (แล้วเริ่มต้นสตริงด้วย"( อักขระตัวแรกคือ') ในขณะที่ข้างต้นเป็นเพียงสตริงเดียวใน GolfScript

ลองมันออนไลน์ 1>ถูกนำมาใช้แทน(บัญชีสำหรับโหมโรง


นี่คือ12 ภาษา 373 ไบต์ งานบางอย่างย้ายไปแล้ว TRANSCRIPT ถูกลบ (ทำให้ Rail แพงเกินไป) และเพิ่ม Scheme (ไก่) แล้ว นี่เป็นเพียงสนามกอล์ฟของฉันสำหรับการอัปเดตที่จะเป็นตั้งแต่การอัปเดตโพสต์หลักใช้เวลาตลอดไป

"1\"09!#.&&+.@"" "" "#|"
#=
''''
<<s
11]0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
(-[Hello, World!]o#''';print(input()in input());'''"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"=#print(([1 1;1 0]^int(readline()))[1,2])#=)?(!?)
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a# =##'''#";e# |#(print(format"~x"(eval(read))))

ฉันสามารถบันทึกไม่กี่ไบต์สำหรับ Julia เนื่องจากความคิดเห็นหลายบรรทัดที่ไม่ได้ระบุทำให้เกิดข้อผิดพลาดกับ STDERR


สิ่งที่ยอดเยี่ยม TRANSCRIPT มีหน้าที่อะไร?
Cabbie407

@ Cabbie407 ฉันยังคงพยายามเพิ่มประสิทธิภาพภาษาที่ได้รับงานใด แต่ปัจจุบัน TRANSCRIPT ได้ยึด Hello World และ Rail ได้เปลี่ยนเป็นงานแท็บ
Sp3000

อาตอนนี้ฉันเห็นแล้วว่า;)ฉันกำลังผัดผ่อนการเปลี่ยนแปลงอะไรในคำตอบของฉันเพราะคำอธิบายที่ยาว lol
Cabbie407

26

7 8 9 10 ภาษา398 431 447 507 ไบต์

นี่น่าจะเป็นสิ่งที่ฉันสามารถทำได้มากที่สุดในการแก้ปัญหาปัจจุบัน

#if      + 0+0/*^",v  +- '[.,][[" ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
a=0--0;b=input();print(sorted(set(b))==list(b));[[""""                 ^ <
print("Hello, World!")--[[vv? +<
#endif/*  >.!0 + +1ffr"!"~< */
#include<stdio.h>/*>:1 +?!^>i:1^*/
int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1//**/1==2
){printf("%x",/*>&:7/.7%.@*/i);}else{for(;--i-1>0;a=b,b=c)c=a +b;printf("%d",b);}}/*]]--"""]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J "` + +,*.]]]*/SSSTNSSNSNSTNTTTTTSSSTNSNSTNTTTTTTSSTNTTSNSSNNSSSNTTTTNSTNNNN

บรรทัดสุดท้ายมีรหัสช่องว่างที่เข้ารหัสเพื่อให้ SE ไม่กินมัน ในการรันโค้ดให้แทนที่ทั้งหมดSด้วยช่องว่างTด้วยแท็บและขึ้นNบรรทัดใหม่

C89, ภารกิจ 16

นี่คือสิ่งที่คอมไพเลอร์เห็น:

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1/ 1==2
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

#if 0ทุกสิ่งทุกอย่างเป็นปล้นเป็นความคิดเห็นหรือภายใน

C ++, ภารกิจ 14

ฉันใช้เคล็ดลับที่ถูกขโมยจากที่นี่เพื่อแยกความแตกต่างระหว่าง C89 และ C ++

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

ลัวะงาน 2

นี่คือโครงสร้างพื้นฐาน

#comment
a=0--comment
print("Hello, World!")--[[
... multiline comment ...
]]--comment

Brainfuck ภารกิจ 1

ฉันเพิ่งมีการให้แน่ใจว่าไม่มีลูปอนันต์หรือจรจัด.,s จะพบ ความคิดเห็นหลายบรรทัดของ Lua นั้นเพิ่มเป็นสองเท่าของความคิดเห็น BF ทุกอย่างนอกเหนือจากอักขระ 2 ตัวแรกคือลูป NOP ขนาดใหญ่

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

Python ภารกิจ 6

อีกครั้งฉันกำลังใช้คุณสมบัติเฉพาะภาษาเพื่อ NOP หรือแสดงความคิดเห็นรหัสอื่น

#comment
a=0--0;b=input();print(sorted(b)==list(b));[["""
... multiline string ...
"""]];#comment

Pyth, ภารกิจ 17

Pyth ดีสำหรับสิ่งนี้ มันต้องใช้เวลาแรก#เป็นwhile True:ห่วงว่าออกอย่างเงียบ ๆ ในข้อผิดพลาด ดังนั้นฉันจะทำให้ส่วนใหญ่ของรหัสสตริง (เพื่อหลีกเลี่ยงการ;สิ้นสุดของวนรอบต้น) จากนั้นเพียงแค่จบวงออกจากที่อื่นสร้างโดยความเห็น Python และทำงาน นี่คือสตริงที่ไม่ว่างทั้งหมดแทนที่ด้วย" string "ซึ่งยังคงเทียบเท่ากับฟังก์ชัน:

#if      + 0+0/*^" string " ,yadhtrib yppaH" string """" string "Hello, World!" string "!"  string "%d"  string "%x" string "%d" string """]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J " string

> <> ภารกิจ 3

อันนี้น่าสนใจมาก การประมวลผลจะกระเด้งไปมาในโค้ดโดยใช้การกระโดดเมื่อจำเป็นเพื่อหลีกเลี่ยงอุปสรรค ชิ้นส่วนที่เกี่ยวข้อง:

#                  v            " ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
                   i                                                   ^ <
                   !      vv? +<
          >.!0 + +1ffr"!"~<
                   >:1 +?!^>i:1^

เต็มไปด้วยดวงดาวภารกิจ 9

ที่นี่ฉันต้องเริ่มไปที่ "ทิ้งอักขระทั้งหมดยกเว้น" ภาษา สิ่งอื่นที่แตกออกดูเหมือนว่า:

      + +*,  + '., , + + +. +*                  ,  +*  . + + *.* +*  ,,,,**,*..*, +,* + + +* + ` + +,*.*

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

      + +*,  + + +,*.*

Befunge-98 ภารกิจ 10

ทำงานคล้ายกับ> <> หนึ่งรายการ โชคดีที่#เป็นกระจกเงาใน> <> และข้ามใน Befunge ดังนั้นเราจึงสามารถใช้พฤติกรรมที่แตกต่างกันได้ นอกจากนี้0/0 == 0.

#if      + 0+0/*^
                >&:7/.7%.@

พื้นที่ว่างภารกิจ 13

นี่เป็นสิ่งสุดท้ายที่ฉันใส่เข้าไปในสองสามบรรทัดแรกนั้นเพียงกด zeroes ลงบนสแต็กเนื่องจากมีเพียงช่องว่างและบรรทัดใหม่จากรหัส "ปกติ" รหัสถูกเข้ารหัส แทนที่ทั้งหมดSด้วยช่องว่างTด้วยแท็บและขึ้นNบรรทัดใหม่

SSSSSSSSSSSSSSSN
SSSSSSSSSSSSSSSSSSN
SSN
SSSSSN
SN
SSN
SSSSSSSSSSSTN
SSN
SN
STN
TTTTTSSSTN
SN
STN
TTTTTTSSTN
TTSN
SSN
N
SSSN
TTTTN
STN
N
N

9

Pip รุ่นต่าง ๆ 17 รุ่น, 383 ไบต์ (ไม่ถูกต้อง)

ในขณะที่คำถามนี้ถูก sandboxed ฉันได้ผสมผสานการแก้ไขPipทั้งหมดของภาษาของฉันและสร้างรูปหลายภาษาโดยใช้ 17 ข้อ น่าเศร้าที่ภาษาเดียวกันรุ่นเดียวกันนั้นไม่ได้รับอนุญาตตามกฎการท้าทายในขณะนี้ แต่ด้วยการอนุญาตของเดนนิสและข้อจำกัดความรับผิดชอบ

รหัสดิบ

I!ga:0m@0:0v:uIN[(oTM0,0i)EN1N1Y1RCkw(hR`1.+0``&2o`)@>3@AB0`u`rZ4AB6({a}V7)BN8AZ9@m]Iv<2W##YqlPByc:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}m:'+.'-X#a+2.'+.n."| "Iv=5La{i+:oSio}j:ak:bPv=11?a>1&0INa%(2,a)[((J_M ZRVl)|0)Jnl?lJnlcJnd.n.RVdm.a.RVmih:$+TBa({j@aEQk}FI0,#a).saTB16a>b?abh=1ua//7.s.a%7a+bbINa"Happy Birthday, ".a.'!"Hello, World!"]@v

กลยุทธ์

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

ดังนั้นเพื่อแยกความแตกต่างระหว่าง Pip สองเวอร์ชั่นฉันแค่ต้องหาตัวแปรหรือตัวดำเนินการตัวอักษรที่เพิ่มเข้ามาในเวอร์ชันที่ใหม่กว่าของทั้งสอง ในรุ่นเก่าจะเป็นศูนย์แทน รหัสv:uIN[...]รวบรวมรายการขนาดใหญ่ที่มีหนึ่งในการตรวจสอบเหล่านี้สำหรับแต่ละรุ่นที่ฉันต้องการทดสอบค้นหาจำนวน nils ที่อยู่ในรายการนั้น ( uตัวแปรจะถูกกำหนดค่าเริ่มต้นเป็นศูนย์อย่างชัดเจน) และเก็บหมายเลขไว้ในv(สำหรับ "รุ่น") .

หลังจากการคำนวณอื่น ๆ มีรายการใหญ่อีกรายการที่คำนวณผลลัพธ์สำหรับ 17 งานจากการท้าทายและใช้vในการเลือกรายการตามรุ่นที่เป็น

รุ่นและงาน

0.15.09.04

การวินิจฉัย: (oTM0,0i)(แก้ไขข้อผิดพลาดกับตัวดำเนินการTri Mที่การตัดอักขระ 0 ตัวจากปลายแต่ละด้านของสตริงจะให้สตริงว่างแทนการทำดัชนีลงในสตริงว่างจะทำให้ไม่มี)

ภารกิจ 18: Iv<2W##YqlPBy(ตั้งค่า: อ่านทุกบรรทัดจาก stdin หากvน้อยกว่า 2) ตามด้วย((J_M ZRVl)|0)Jn(ย้อนกลับรายการของบรรทัดเปลี่ยนตำแหน่งและเข้าร่วมกลับเข้าไปในสตริง)

0.15.08.06

การวิเคราะห์: EN1(เพิ่มENตัวดำเนินการ umerate)

ภารกิจที่ 1: Iv<2W##YqlPBy(รหัสการตั้งค่าเดียวกันกับด้านบน) ตามด้วยl?lJnl(เข้าร่วมในการขึ้นบรรทัดใหม่)

0.15.08.03

การวินิจฉัย: 1N1(เพิ่มNเป็นINผู้ประกอบการเวอร์ชั่นสั้น)

ภารกิจ 20: c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0(ตั้งค่า: สร้างรายการที่มีส่วนบนและล่างของกระดานหมากรุกและเก็บไว้c) ตามด้วยcJn(เข้าร่วมในบรรทัดใหม่)

0.15.08.01

การวิเคราะห์: Y1(เพิ่มYตัวดำเนินการ ank)

ภารกิจที่ 19: Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}(ตั้งค่า: ถ้าvเป็น 3 สร้างครึ่งบนของเพชรd) ตามด้วยd.n.RVd(ย้อนกลับสำหรับครึ่งล่างและเข้าร่วมในบรรทัดใหม่)

0.15.06.19

การวิเคราะห์: RCk(เพิ่มตัวดำเนินการRandom Choice)

ภารกิจ 17: m:'+.'-X#a+2.'+.n."| "(ตั้งค่า: สร้าง+----+\n| สตริงในm) ตามด้วยm.a.RVm(ตัดอินพุตmและย้อนกลับm)

0.15.06.12

การวินิจฉัย: k( kตัวแปรpreinitialized เป็น", "; ก่อนหน้านี้มันไม่ได้กำหนดและไม่มีศูนย์)

ภารกิจที่ 16: Iv=5La{i+:oSio}(ถ้าvเป็น 5 ให้สร้างหมายเลขฟีโบนักชีในi) ตามด้วยi

0.15.06.08 (หมายเหตุ: หมายเลขเวอร์ชั่นไม่เปลี่ยนแปลงจนกว่าจะมีการคอมมิชชันต่อไปนี้)

การวิเคราะห์: w( wตัวแปรpreinitialized ถึง`\s+`)

ภารกิจ 15: h:$+TBa(แปลงอินพุตเป็นเลขฐานสองและผลรวมตัวเลขบันทึกผลลัพธ์ในhงาน 12 ในภายหลัง)

0.15.05.29

วินิจฉัย: (hR`1.+0``&2o`)@>3@AB0

รุ่นนี้เพิ่ม&เป็นรูปแบบการแทนที่สำหรับสตริงที่ตรงกันทั้งหมดในการแทนที่ regex (แรงบันดาลใจจาก sed) โค้ดด้านบนใช้h( 100) และแทนที่ด้วย`&2o`(เช่น"1002o"ในเวอร์ชันที่ใหม่กว่า แต่จะ"&2o"เป็นเวอร์ชั่นเก่ากว่า) จากนั้นจะแบ่งอักขระทั้งหมดตามหลังตัวที่ 3 ( "2o"ในเวอร์ชั่นใหม่กว่า""ในเวอร์ชั่นเก่ากว่า) และพยายามทำดัชนีลงในสตริงนั้น การจัดทำดัชนีในสตริงว่างจะให้ศูนย์

งาน 7: j:ak:b(การติดตั้ง: สำเนา vars ท้องถิ่นa, bการ vars โลกj, kเพื่อให้พวกเขาจะสามารถใช้ในฟังก์ชั่น) ตามด้วย({j@aEQk}FI0,#a).s(กรองสำหรับดัชนีในaที่ตัวละครที่สอดคล้องกันเท่ากับbและเข้าร่วมในพื้นที่)

0.15.05.26

การวินิจฉัย: `u`(เพิ่มประเภทรูปแบบ; ในเวอร์ชันก่อนหน้า backticks จะถูกละเว้นเป็นอักขระที่ไม่รู้จักและนิพจน์จะประเมินuซึ่งเป็นศูนย์)

งาน 14: aTB16(แปลงTo BASE 16)

0.15.05.24

การวินิจฉัย: rZ4(สร้างrตัวแปรพิเศษที่ส่งกลับค่าสุ่มระหว่าง 0 ถึง 1 ในแต่ละครั้งที่มีการอ้างอิงก่อนหน้านี้มันไม่ได้ถูกกำหนดและทำให้นิพจน์ประเมินค่าเป็นศูนย์)

ภารกิจที่ 13: a>b?ab(นิพจน์ส่วนประกอบ)

0.15.05.12

การวิเคราะห์: rZ4(เพิ่มZตัวดำเนินการ ip)

ภารกิจ 12: h=1(ผลรวมของบิตจากภารกิจ 15 ต้องเท่ากับ 1)

0.15.05.11

การวิเคราะห์: AB6(เพิ่มABตัวดำเนินการค่าตัวถูกละลาย)

ภารกิจที่ 11: Pv=11?a>1&0INa%(2,a)[...]@v(ถ้าvเป็น 11 เอาต์พุต1ถ้าอินพุทมากกว่า 1 และจำนวนที่เล็กกว่าจะแบ่งออกเป็นอย่าง0อื่นถ้าvเป็นอย่างอื่นให้ใช้vดัชนีของรายการเพื่อตัดสินใจว่าจะเอาท์พุทอะไร)

0.15.05.02

การวินิจฉัย: ({a}V7)(เพิ่มVโอเปอเรเตอร์เมื่อVไม่ได้กำหนดจะส่งอาร์กิวเมนต์นี้เป็นศูนย์และ 7 ไปยังฟังก์ชัน{a}ที่ส่งกลับอาร์กิวเมนต์แรก)

ภารกิจ 10: a//7.s.a%7(อินพุต int- หารด้วย 7 และ mod 7 คั่นด้วยช่องว่าง)

0.15.04.26

วินิจฉัย: BN8(เพิ่มBitwise Nประกอบ egation)

ภารกิจ 9: a+b

0.15.04.23

การวิเคราะห์: AZ( AZตัวแปรpreinitialized เป็นตัวอักษรตัวพิมพ์ใหญ่)

ภารกิจที่ 5: bINa( INนับการเกิดขึ้น)

0.15.04.20

วินิจฉัย: m@0:0ตามด้วย9@m

mตัวแปรถูกกำหนดค่าเริ่มต้นเป็น 1,000 ในการคอมมิชชันนี้ตัว@ดำเนินการถูกแก้ไขเพื่อส่งคืนค่า lvalues ก่อนหน้านี้มอบหมายm@0ให้เตือนและไม่ทำอะไรเลย ดังนั้น post-bugfix คำสั่งแรกmจะตั้งค่า0000ซึ่งเป็นดัชนีทางกฎหมายสำหรับ9; pre-bugfix mยังคงอยู่1000ซึ่งไม่ใช่ดัชนีทางกฎหมาย (ดัชนียังไม่เป็นวัฏจักร)

ภารกิจที่ 3: "Happy Birthday, ".a.'!

0.15.04.18

การวินิจฉัยก่อนหน้านี้ทั้งหมดส่งผลให้ไม่มีการเพิ่มลงในรายการการวินิจฉัย

ภารกิจที่ 2: "Hello, World!"


รหัสอื่นส่วนใหญ่เป็น tweaks ฉันต้องทำเพื่อหลีกเลี่ยงข้อผิดพลาดในรุ่นต่าง ๆ โพสต์นี้มีอยู่แล้วนานเกินไปดังนั้นถ้าคุณอยากรู้เกี่ยวกับสิ่งที่ฉันยังไม่ได้อธิบายว่าลองมาสนทนากับภาษาลึกลับเนต


4

6 ภาษา, 226 ไบต์ (229 ขึ้นอยู่กับการ\x1bยอมรับ!)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));/*
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

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


1. Brainfuck

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

การทดสอบบนhttp://copy.sh/brainfuck/และhttp://brainfuck.tk/

หลังจากแยกตัวอักษรที่ไม่สนใจทั้งหมดแล้วโปรแกรมด้านบนคือทั้งหมดที่เราเหลืออยู่ซึ่งเป็นเพียงตัวอย่างโปรแกรม cat ที่มีลูปว่างเปล่าพิเศษบางอย่างเพื่อเลี่ยงภาษาอื่น ๆ ที่ใช้สัญลักษณ์

2. ทับทิม

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

การใช้งาน:

ruby cluster

ด้านบนเป็นรหัสหลังจากลบความคิดเห็นทั้งหมดแล้ว บรรทัดแรกจะไร้ประโยชน์โดยสิ้นเชิงในรูบีที่เรากำหนดแสดงออกปกติบางอย่างที่จะมี Befunge-93 และ brainfuck รหัสแล้วเราจะสร้างอาร์เรย์จะมีHelloและWorldและพิมพ์โดยใช้printf(เพื่อเพิ่ม,และ!)

3. Perl

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

การใช้งาน:

perl cluster <name>

คล้ายกับ Ruby มากยกเว้นว่าเราเก็บอาร์เรย์อ้างอิงไว้$aเมื่อเราพยายามเข้าถึง$a[0]มันว่างเปล่าดังนั้นเราจึงสามารถแทนที่มันด้วยข้อความสำหรับการท้าทาย 3 Happy Birthdayและpop(ซึ่งแสดงอาร์กิวเมนต์สุดท้ายของโปรแกรมบรรทัดคำสั่ง )

4. จาวาสคริปต์

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;
$a=['Hello','World'];
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

การใช้งาน: วางในคอนโซลของเบราว์เซอร์และเรียกใช้

เช่นเดียวกับ Ruby และ Perl บรรทัดแรกสร้างRegExpวัตถุที่ไร้ประโยชน์จากนั้นเราเก็บอาร์เรย์ที่ไร้ประโยชน์ใน$aและยกตัวอย่างสองสตริงที่ไร้ประโยชน์หนึ่งที่มีรหัส Ruby / Perl และหนึ่งที่มีขึ้นบรรทัดใหม่และ a #แล้วเราprompt()สำหรับการป้อนข้อมูลและalert()ผลที่คาดหวัง โดยมนุษย์ส่วนใหญ่สำหรับความท้าทาย 4 เราลงท้ายด้วยRegExpวัตถุที่ไร้ประโยชน์อื่นเพื่อปิดลูป brainfuck

9. Befunge-93

/&&#[+.#]@

การทดสอบบนhttp://www.quirkster.com/iano/js/befunge.html

ตามที่ผมเข้าใจมัน/แบ่งสแต็คและผลักดันผลซึ่งไม่มีผลร้ายยกเว้นการผลักดันNaNในเว็บไซต์ข้างต้น&ถามสำหรับการป้อนข้อมูลของจำนวนเต็มเพื่อให้เราอ่านตัวเลขทั้งสองต้องตามความท้าทายที่ 9 บนสแต็คที่#มั่นใจว่าเราข้ามมากกว่า[ซึ่งมีไว้สำหรับ brainfuck +แล้วเพิ่มตัวเลขสองอันดับแรกบนสแต็ก.เอาท์พุทพวกเขา#]สำหรับ brainfuck อีกครั้งและ@ออก

13. PHP (ทำงานใน Bash)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));

การใช้งาน:

php cluster <x> <y>

ใน PHP สิ่งที่ไม่รวมอยู่ใน<?แท็กคือ verbatim output ดังนั้นนี่จึงเป็นผลลัพธ์ของรหัส Befunge-93 และ brainfuck ดังนั้นเราจึงdie()ใส่โค้ดลงไปในหน้าจอทันทีล้างหน้าจอ ( \x1bc) ตามmax()ด้วยอาร์กิวเมนต์สองตัวแรก


คุณสามารถใส่ตัวอักษร ESCape ตัวอักษรในสตริงตัวอักษรเพียงแค่เพิ่มบันทึกว่ามันมี ( the first character in the first string literal is the byte ASCII 27); คะแนนของคุณคือ 226
แมว

@cat ใช่ฉันคิดว่าคุณพูดถูกฉันได้ออกไปตามที่เป็นอยู่ตอนนี้ แต่ฉันได้เขียน 226 เรื่อง ฉันลืมวิธีการที่ฉันมีความสุขมากกับความท้าทายนี้ฉันอาจจะทำอีกเล็กน้อยในขณะนี้และใช้ ES6 ฉันสามารถมี.match'\x09'(ที่ 'เป็น `) บางทีฉันอาจจะดูว่าฉันสามารถเพิ่มมากขึ้นในบางจุด!
Dom Hastings

4

6 ภาษา450 4504 ไบต์

ทุบตี, brainfuck, C, gawk4, JavaScript และ Minimal-2D

/*\t/#[R,+/D
/\t/ # UL.-L<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/#*/
#define func
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#//]++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<[>>>>>+++[<++++[<<....>....>-]<<<.>>>>-]<<<[>>+<<-]<[[>+<-]<]>>-]

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

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

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

ทุบตีงาน 3

เห็นได้ชัดว่าฉันใช้ sed ฉันพยายามใส่บทที่ไม่ดีในเรื่องนี้ แต่ฉันไม่สามารถทำงานได้ดังนั้นฉันจึงไปตามเส้นทางทุบตี วิธีที่ฉัน DIT มันอยู่ภายในความคิดเห็นซีและ awk Falseประเมินมัน

sed --version จะช่วยให้ sed (GNU sed) 4.2.2

bash --version จะช่วยให้ GNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)

ดังนั้นส่วนที่ไม่ดีก็ลงมา

sed "s/^\(.*\)$/Happy Birthday, &!/;q"

จัดกลุ่มอินพุตให้วางลงในสตริงใหม่และพิมพ์ผลลัพธ์ เรื่องธรรมดา ๆ

brainfuck งาน 20

อย่างนี้มันง่ายที่จะซ่อนฉันเดา บรรทัดที่ขึ้นต้นด้วย#//ถูกละเว้นโดย C และ awk หรืออย่างน้อยพวกเขาก็สามารถอยู่กับขยะได้

bf จะช่วยให้ bf - a Brainfuck interpreter version 20041219

นี่คือรหัสย่อ บรรทัดแรกเป็นเพียงขยะจากภาษาอื่น

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

ฉันจะพยายามอธิบายวิธีการทำงาน

++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<

นี่จัดเทปและตัวชี้ไปที่นี้

0 8 10 46 64 C2 C1
  ^

เซลล์ที่ถือ 8 คือตัวนับโกลบอลสำหรับลูปต่อไปนี้
ซึ่งเป็นจำนวนครั้งที่ 3 บรรทัดเดียวกันจะถูกพิมพ์

[>>>>>+++

ตั้งค่าC1เป็น 3 จำนวนบรรทัดเดียวกัน

    [<++++

กำหนดC2เป็น 4 จำนวน " ....@@@@" ในหนึ่งบรรทัด (ในตอนต้น)

        [<<....>....>-]<<<.>>>
    >-]

พิมพ์สายสมบูรณ์ decrementing C2ในกระบวนการ
เมื่อเป็นศูนย์จะพิมพ์ขึ้นบรรทัดใหม่และการลดลงC2C1

ถ้าC1เป็นศูนย์เวทมนตร์ที่เกิดขึ้น

    <<<[>>+<<-]
    <[[>+<-]<]

46 ถูกย้ายด้านหลัง 64
the 10 และตัวนับทั่วโลกจะถูกย้ายไปทางขวาหนึ่งรายการ

>>-]

ตัวนับโกลบอลจะลดลง
ถ้าโปรแกรมออกจากศูนย์

C, ภารกิจที่ 2

ฉันหมดความสามารถเล็กน้อยของ C ที่นี่โดยการพิมพ์ "Hello, World!" บางคนต้องทำงาน ...

gcc --version จะช่วยให้ gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2

รหัส C จริง

#define func
func main(){puts("Hello, World!");}
#

#define funcคือการทำให้ awk โอเคกับเรื่องนี้ มันคิดว่านี่เป็นฟังก์ชั่น awk ตัวย่อของ func เป็นคุณสมบัติที่เพ่งพิศ

gawk4, ภารกิจ 18

เนื่องจากฉันใช้ awk สำหรับทุกสิ่งที่นี่ฉันตัดสินใจว่ามันต้องอยู่ในนี้

awk --version จะช่วยให้ GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)

awk เห็นสิ่งนี้

/*\t/
/\t/
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#

รูปแบบการค้นหารวมทั้งการประเมิน\t falseฉันเลือกแท็บที่นี่เพราะฉันคิดว่าไม่สามารถอยู่ในอินพุตได้ ประเมินsed หาค่าเป็นเท็จ ฟังก์ชั่นก็โอเค โปรแกรมจะถูกดำเนินการหากรูปแบบที่ว่างเปล่าถูกจับคู่ซึ่งเป็นสำหรับการป้อนข้อมูลใด ๆfalse"the string"&&0

มันทำอย่างนี้

อินพุต

elaic
PARLI
ucfit
srigs

เอาท์พุต

Supe
rcal
Ifra
Gili
stic

คุณต้องแน่ใจว่าบรรทัดอินพุตทั้งหมดมีความยาวเท่ากัน ใช้ช่องว่างเพื่อเติมให้เต็ม

JavaScript, ภารกิจ 9

ฉันไม่แน่ใจว่าสิ่งนี้ถูกต้องหรือไม่เพราะมันง่ายเกินไป หากคุณให้ไฟล์ html สิ้นสุดลงและเปิดในเบราว์เซอร์ (ฉันใช้ Firefox 40.0.3 และ chrome 45.0.2454.85) จะแจ้งให้คุณป้อนข้อมูล คุณต้องป้อนตัวเลขสองตัวคั่นด้วยช่องว่างและจะแจ้งเตือนผลรวมของเหล่านั้น

<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>

Minimal-2Dภารกิจ 1

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

R,+/D
UL.-L

RUDL ถูกต้องขึ้นลงและซ้าย ดังนั้นมันจึงเริ่มไปทางขวาอ่านตัวละครจาก stdin ไปยังหน่วยความจำ เครื่องหมายทับจะข้ามคำสั่งถัดไปหากหน่วยความจำมีค่า 0 นี่คือการสิ้นสุดนี้ หากอ่านอักขระที่มีค่า -1 อินพุตจะสิ้นสุดลง ดังนั้นถ้า -1 ถูกอ่านมันจะข้าม D และยุติ หากมีสิ่งอื่นอ่านอยู่ด้านซ้ายให้เพิ่ม 1 นั้นกลับไปที่หน่วยความจำแล้วพิมพ์อักขระเป็น stdout จากนั้นมันจะไปทางซ้ายและขึ้นและเริ่มต้นใหม่

การทดสอบ

คำเตือน:ฉันจะไม่รับผิดชอบต่อความเสียหายใด ๆ ที่คุณทำกับระบบของคุณด้วยสิ่งนี้

นี่เป็นการสมมติว่าคุณมี bash & co, gawk (อย่างน้อยรุ่นที่ 4 เพราะมันใช้อาร์เรย์หลายมิติ), gcc, python, bf เป็นล่ามแปลสมองและติดตั้ง Firefox

cluster.htmlจะทำให้มันง่ายคัดลอกแหล่งโปรแกรมที่ไฟล์ชื่อ ทำให้ไฟล์นั้นทำงานได้สำหรับภารกิจทุบตี คัดลอกและวางล่ามสำหรับ Minimal-2dลงในไฟล์ชื่อminimal2D.pyในไดเรกทอรีเดียวกัน จากนั้นคัดลอกและวางสคริปต์ต่อไปนี้ไปยังไฟล์สคริปต์และวางลงในไดเรกทอรีเดียวกันทำให้สามารถเรียกใช้งานได้และเรียกใช้ ... ดีฉันเป็นใคร ถ้าคุณอ่านสิ่งนี้คุณอาจไม่ต้องการคำอธิบายมากขนาดนั้นและจะให้มันทำงานต่อไป

#!/bin/bash
# Task  3: bash
echo "Dr. Hfuhruhurr" | ./cluster.html 2>/dev/null;echo
# Task 18: awk 
printf "elaic\nparli\nucfit\nsrigs\n" | awk -f cluster.html 2>/dev/null;echo
# Task  2: C
cp ./cluster.html ./cluster.c;gcc -w -o cluster cluster.c;./cluster;rm cluster cluster.c;echo
# Task  1: Minimal-2D
python minimal2D.py cluster.html <<<"This
has
to be
copied     !!!";echo
# Task 20: brainfuck
bf cluster.html;echo
# Task  9: JavaScript
firefox cluster.html 2>/dev/null
#google-chrome cluster.html 2>/dev/null

ในนั้นคุณจะพบคำสั่งสำหรับการเรียกใช้การทดสอบเป็นรายบุคคล

มีความสุข!


หนึ่งใน brainfuck มีปัญหา รหัสมีวงเล็บเหลี่ยมไม่สมดุลและจะไม่ทำงานอย่างถูกต้อง (คุณต้องเรียกใช้ไฟล์ทั้งหมดไม่ใช่เฉพาะส่วนที่เกี่ยวข้อง) นอกจากนี้สี่เหลี่ยมจัตุรัสของหมากฮอสเป็นจริง4x3แทนที่จะเป็น 4x4 เพื่อดูสี่เหลี่ยมเพิ่มเติมในข้อความ
PurkkaKoodari

ขอบคุณสำหรับคำใบ้ มันวิ่งได้ดีที่นี่ ฉันมักจะเรียกใช้ไฟล์ทั้งหมดตามที่คุณเห็นในสคริปต์ของฉัน ไม่แน่ใจว่าล่ามควรตรวจสอบเครื่องหมายวงเล็บหรือไม่ก่อนเรียกใช้ ฉันไม่รังเกียจ แต่ฉันมองข้ามการนับบรรทัดนั้น ต้องเปลี่ยนสิ่งนั้น
Cabbie407

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