สกปรกและไม่ซ้ำใคร


26

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

โปรแกรมที่เก่าแก่เป็นโปรแกรมว่าเมื่อวิ่งไม่ได้ข้อผิดพลาด แต่มันจะเกิดข้อผิดพลาดเมื่อใดก็ตามที่ย่อยอย่างต่อเนื่องของขนาดที่ถูกลบออกSn1n<|S|

โปรแกรมสกปรกเป็นตรงกันข้ามมันเป็นโปรแกรมที่เมื่อรันจะเกิดข้อผิดพลาดอย่างไรก็ตามเมื่อใดก็ตามที่สตริงย่อยต่อเนื่องของขนาดโดยที่จะถูกลบออกก็ไม่ผิดพลาดS1 n < | S |n1n<|S|

สำหรับความท้าทายนี้ข้อผิดพลาดคือเอาต์พุตที่ไม่ว่างเปล่าไปยัง STDERR

ความท้าทายของคุณคือการเขียนโปรแกรมสกปรกที่ใช้ไบต์ที่ไม่ซ้ำกันให้มากที่สุด ซึ่งหมายความว่าคุณจะได้รับหนึ่งจุดสำหรับทุกไบต์ที่ไม่ซ้ำกันซึ่งปรากฏในรหัสของคุณด้วยคะแนนที่ใหญ่กว่า คะแนนสูงสุดคือ 256


เป็นไปได้ไหมที่จะตอบคำถามนี้ในภาษาที่เกี่ยวข้องกับวงเล็บ / วงเล็บ? เป็นไปได้ที่จะลบสตริงย่อยบางส่วนออกจากรหัสเพื่อให้มีวงเล็บที่ไม่ตรงกัน
JungHwan Min

@JungHwanMin หากภาษาบังคับวงเล็บที่สมดุลฉันจะสงสัยว่ามันคงเป็นไปไม่ได้
ข้าวสาลี Wizard

@CatWizard ดังนั้นโปรแกรมสกปรกไม่ผิดพลาดเมื่อ substring อย่างต่อเนื่องของตัวอักษร (เช่นไม่ต่อเนื่องชุดไบต์) ถูกลบใช่ไหม?
JungHwan Min

@JungHwanMin ขออภัย อาจหรือไม่ เราสนใจเฉพาะสตริงที่ต่อเนื่อง
ข้าวสาลี Wizard

คำตอบ:


18

เอกภาพ , 14 ไบต์

123456789ABCDE

สิ่งนี้เข้ารหัสโปรแกรม brainfuck [ซึ่งมีข้อผิดพลาดเนื่องจากวงเล็บเหลี่ยมที่ไม่ตรงกัน

ไบต์ลบจะมีผลใน>, <, +, -, ., ,หรือโปรแกรมที่ว่างเปล่าซึ่งเป็นโปรแกรม brainfuck ที่ถูกต้อง


นี่เป็นทางออกที่ดีที่สุดเนื่องจากสามารถลดโซลูชันที่ยาวกว่าไปยังโซลูชันนี้ได้ซึ่งข้อผิดพลาด
Jo King

นี่เป็นทางออกเดียว
user202729

13

R , 3 ไบต์

qrt

ลองออนไลน์!

ชื่อของวัตถุเป็นโปรแกรมที่ถูกต้องในอาร์

qrt ไม่ใช่ชื่อของสิ่งใดดังนั้นจึงส่งกลับข้อผิดพลาด

q เป็นฟังก์ชั่นเลิก

qr เป็นฟังก์ชั่นการสลายตัวของ QR

rt คือฟังก์ชันการสุ่มตัวอย่างการแจกแจงแบบ t

qt เป็น t การแจกแจงผกผันของ CDF

t เป็นฟังก์ชั่นขนย้าย


2
@pajonk แต่ "r" เป็นสตริงย่อยต่อเนื่อง การลบที่ทิ้ง "qt"
Orphevs

3
มีโปรแกรมสกปรกหนึ่งรายการในระยะ R 3 และนี่คือรายการ! (ถ่านเพียงคนเดียวโปรแกรมที่ถูกต้อง0-9cqtCDFIT, โปรแกรมใด ๆ ดังนั้นจึงต้องเริ่มต้นด้วยcm, qf, qr, qt, tsหรือIm. ความยาวทั้งสามเป็นไปได้qrf, qrm, qrt, qtsและtsdและมีเพียงหนึ่งในจำนวนนี้เป็นสิ่งโสโครก (คนอื่นไม่สามารถขยายการอย่างใดอย่างหนึ่งที่จะทำให้พวกเขาสกปรก ที่มีฟังก์ชั่นไม่มีrm*, rf*, ts*, sd*)
JDL

@ ต้องขออภัยในความไม่ดีของฉันเข้าใจผิดความท้าทาย
pajonk

10

เยลลี่ , 4 5 6 7 8 10 11 ไบต์

“a”;⁽PFð+µU

ลองออนไลน์!

ตรวจสอบมัน

พยายามที่จะเพิ่มสตริงที่มีจำนวนเต็ม

โปรแกรมย่อยที่เป็นไปได้บางส่วน:

“a” เป็นตัวอักษรสตริง

“a เป็นสตริงตัวอักษรเดียวกัน

เป็นสตริงว่าง

“a”; เชื่อม "a" เข้ากับตัวเอง

... มากเกินกว่าที่จะระบุได้ทั้งหมด


1
โชคดีที่ Jelly ยังช่วยให้คุณผิดพลาดได้
user202729

6

รูปหลายเหลี่ยม 3 ไบต์

1 2

ทำงานใน:

  • JavaScript
  • ทับทิม
  • R
  • เสียงคู่แปด
  • GHCi
  • จูเลีย

ใน JavaScript ให้โยนSyntaxError: โทเค็นที่ไม่คาดคิด: ตัวอักษรตัวเลขหรือข้อผิดพลาดที่คล้ายกัน

สตริงอื่น ๆ ทั้งหมดเป็นตัวอักษรตัวเลขที่ถูกต้อง ( 1 , 2หรือ12 )


ใน GHCi สิ่งนี้จะพ่น

<interactive>:1:1: error:
     Non type-variable argument in the constraint: Num (t1 -> t2)
      (Use FlexibleContexts to permit this)
     When checking the inferred type
        it :: forall t1 t2. (Num t1, Num (t1 -> t2)) => t2

นี้เป็นเพราะมันพยายามที่จะนำไปใช้1เพื่อ2เป็นฟังก์ชั่น แต่ก็ไม่สามารถทำได้ เมื่อส่วนใดส่วนหนึ่งของสิ่งนี้ถูกลบออกมันก็จะกลายเป็นตัวอักษรที่เป็นตัวเลข


Polyglot: R, Octave, Ruby, Pythons ...
ngm

1
@ngm GHCi เช่นกันอย่างไรก็ตามข้อผิดพลาด `2` ใน python
ข้าวสาลี Wizard

ฉันสงสัยว่ามันธรรมดามาก ฉันได้เปลี่ยนเป็นวิกิชุมชนแล้วโปรดแก้ไขด้วยภาษาทั้งหมดที่ใช้งานได้!
Arnauld

5

Python 2 , 2 ไบต์

อักขระที่ไม่คาดหมายหลังอักขระต่อเนื่องของบรรทัด

\0

\ตามด้วย123456789 #
ลองออนไลน์!

หมายเลขฐานแปดไม่ถูกต้อง

08

0ตามด้วย89
ลองออนไลน์!

เยื้องที่ไม่คาดคิด

 0

หรือ\tตามด้วย123456789\
ลองออนไลน์!


5

Python 2/3 , 3 ไบต์

4\f2

หรือ

4\x0c2

ลองออนไลน์!

ใน python "\ f" เหมือนกับ "\ x0c" และเป็นอักขระป้อนฟอร์ม นี่หมายความว่าเป็นการแจ้งให้เครื่องพิมพ์ไปที่บรรทัดถัดไป

หากการแสดงออกของหลามเริ่มต้นหรือสิ้นสุด\fก็จะถูกละเว้นโดยทั่วไปดังนั้น\f2การแสดงออกที่ถูกต้อง

4และ2สามารถเป็นตัวเลขใด ๆ 0-9 อย่างไรก็ตามสำหรับไบต์แรกที่จะ0ใช้ได้เฉพาะในหลาม 2.7.15 เป็นถูกทำคำประกาศทางกฎหมายของ022

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

(เป็นที่น่าสังเกตว่าใน IDLE ไฟล์นี้จะเปิดเหมือน "42")

แหล่งที่มาของคำอธิบายฟีดฟอร์ม: https://stackoverflow.com/a/26184126


3
\fนี้จะง่ายต่อการเข้าใจถ้าคุณใช้รหัสจริงในแหล่งที่มาโดยไม่ต้อง นี่คือลิงค์ลองออนไลน์ที่คุณสามารถรับคำตอบล่วงหน้าได้
ข้าวสาลี Wizard

1
ฉันได้เพิ่มมันเป็นตัวแปรสำหรับการชี้แจง นอกจากนี้ขอขอบคุณสำหรับข้อเสนอแนะของลิงก์
Matt

4

Dyalog APL , 5 ไบต์ ( SBCS )

~≢0 1

ลองออนไลน์! หรือ ทดสอบโปรแกรมที่เป็นไปได้ทั้งหมด

แน่นอนมีคำตอบที่น่าเบื่อดีกว่า แต่นี่เป็นคำตอบที่ไม่น่าเบื่อที่สุดที่ฉันเคยพบ

ต้องใช้ SBCS เนื่องจาก Dyalog Classic มีเอาต์พุตใน STDERR เสมอทำให้ไม่สามารถใช้งานได้

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