สวัสดีชาวโลกด้วยเกลียว


17

เป้าหมายของคุณ : เพื่อเขียนโค้ดที่จะส่งผลให้เกิดผลลัพธ์แบบคลาสสิกของ "Hello, world!" ถูกพิมพ์ไปยัง STDOUT หรือเทียบเท่า

กฎ : รหัสจะต้องอยู่ในการพิมพ์ ASCII ทั้งหมด รหัสทั้งหมดจะต้องใช้งานได้ - การลบอักขระการนับใด ๆ จะต้องเปลี่ยนผลลัพธ์หรือทำให้รหัสไม่ทำงาน ตัวแปรทั้งหมดจะต้องใช้หลังจากการมอบหมาย ตัวอักษรและสตริงตัวอักษรจะต้องมีความจำเป็นต่อเอาท์พุท - นั่นคือการแทนที่ตัวอักษรตัวอักษรใด ๆ หรือตัวละครใด ๆ ภายในสตริงตัวอักษรที่มีตัวละครอื่นจะต้องสามารถเปลี่ยนผล (และไม่ผ่านผลกระทบของลำดับหนี - หรือเทียบเท่า)

(หมายเหตุ: แก้ไขกฎขั้นสุดท้ายแล้ว)

การให้คะแนน : นี่คือจุดที่น่าสนใจ คะแนนสูงสุดชนะตามจำนวนอักขระตามกฎของการโยนโบว์ลิ่งทั่วไป แต่การใช้อักขระซ้ำ ๆ จะส่งผลให้มีการหักคะแนน โดยเฉพาะ ...

  1. การใช้ตัวอักษรและตัวเลขซ้ำ ๆ (az, AZ, 0-9) จะส่งผลให้มีการหัก 3 คะแนนต่อการทำซ้ำ (การใช้ครั้งแรกไม่ส่งผลให้มีการหัก)
  2. การใช้เครื่องหมายวรรคตอนพื้นฐานซ้ำ ๆ ([!? .-, ": ';]) - รวมถึงวงเล็บ - จะส่งผลให้มีการหัก 2 คะแนนต่อการทำซ้ำ
  3. การใช้อักขระ ASCII อื่น ๆ ซ้ำ ๆ {`~ @ # $% ^ & * _ + = | \ /> <} - รวมถึงเครื่องหมายวงเล็บปีกกา - จะส่งผลให้มีการหัก 4 คะแนนต่อการทำซ้ำ
  4. การใช้ช่องว่างแท็บและการขึ้นบรรทัดใหม่ซ้ำ ๆ จะส่งผลให้ลด 1 คะแนนต่อการทำซ้ำ นั่นคือการใช้เว้นวรรคแท็บหรือการขึ้นบรรทัดใหม่ครั้งแรกเท่านั้นที่จะนับรวมยอดของคุณ

หมายเหตุ: ความคิดเห็นจะไม่นับรวมทั้งหมดแม้ว่าอักขระที่ทำเครื่องหมายที่จุดเริ่มต้น / สิ้นสุดของความคิดเห็นจะเป็นเช่นนั้น ตัวอย่างเช่นใน C / C ++ ถ้าคุณมี/* This is a comment */มันจะนับสองสแลชและเครื่องหมายดอกจันสองอัน แต่จะไม่มีอะไรคั่นระหว่างพวกเขา

ตัวอย่างบางส่วน(หมายเหตุ: ใช้ Julia เป็นภาษาตัวอย่าง) ...

print("Hello, world!");

อักขระที่มองเห็นได้ทั้งหมด: 22 มี
ช่องว่าง: +1
ตัวอักษรและตัวเลขซ้ำ: -12 สำหรับ llor
เครื่องหมายวรรคตอนซ้ำแล้วซ้ำอีก: -2 สำหรับ "
คะแนนสุดท้าย: 22 + 1-12-2 = 9

print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII

อักขระทั้งหมด: 43 (ไม่นับอักขระใด ๆ หลังจาก # ซึ่งเป็นอักขระความคิดเห็น) มี
ช่องว่าง: +1
ตัวอักษรและตัวเลขซ้ำ: -18 สำหรับ rr1008
เครื่องหมายวรรคตอนซ้ำแล้วซ้ำอีก: -24 สำหรับ () "" "" ",,,
สุดท้าย คะแนน: 43 + 1-24-18 = 2

xy=STDOUT
m="Hello, world!"
print(xy,m);

อักขระที่มองเห็นได้ทั้งหมด: 37
ประกอบด้วยบรรทัดใหม่: +1 มี
ช่องว่าง: +1
ตัวอักษรและตัวเลขซ้ำ: -18 สำหรับ xyllor
เครื่องหมายวรรคตอนซ้ำแล้วซ้ำอีก: -4 สำหรับ ", ทำ
ซ้ำ ASCII อื่น ๆ : -4 สำหรับ =
คะแนนสุดท้าย: 37 + 1 + 1-18-4 -4 = 13

โค้ดสองสามชิ้นที่ไม่ถูกต้อง ...

x=2;print("Hello,world!")  

ปัญหา: xได้รับมอบหมาย แต่ไม่ได้ใช้

print("Hello,"*" world!")  

ปัญหา: *ไม่จำเป็นผลลัพธ์จะเหมือนกันหากไม่มี

k=1
if k>0
  print("Hello, world!")
else
  print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end  

ปัญหา: printคำสั่งที่สองจะไม่ทำงาน นอกจากนี้การลบอักขระในเครื่องหมายคำพูดในprintคำสั่งที่สองจะไม่เปลี่ยนเอาต์พุต

x="Hello, world!";
print(x)  

ปัญหา: การลบบรรทัดใหม่จะไม่เปลี่ยนผลลัพธ์หรือทำให้เกิดข้อผิดพลาด (ใน Julia เซมิโคลอนจำเป็นเฉพาะถ้ามีหลายคำสั่งอยู่ในบรรทัดเดียวกันมิฉะนั้นเพียงระงับค่าที่ส่งคืน)

print("Hellos\b, world!")  

ปัญหา: ตัวละครที่ไม่ได้ส่งผลกระทบต่อผลตามที่ได้รับลบโดยs \bสิ่งนี้ยอมรับได้ถ้าทำผ่านรหัส ( "Hello",char(100),"\b, world!") แต่ไม่สามารถทำได้ผ่านตัวอักษรสตริงหรือตัวอักษรตัวอักษร

คะแนนเครื่องคิดเลขที่สะดวก - http://jsfiddle.net/4t7qG/2/ - ขอบคุณ Doorknob


1
ดูเหมือนว่าอยู่ใกล้กับcodegolf.stackexchange.com/questions/19477/ ......และcodegolf.stackexchange.com/questions/18721/…
Kyle Kanos

1
ดูเหมือนว่าจะเกี่ยวข้องกับการสนทนาของคุณmeta.codegolf.stackexchange.com/questions/777/…
Martin Ender

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

1
@Dennis - หากโปรแกรมของคุณสร้างบรรทัดใหม่เนื่องจากคำสั่งไม่มีปัญหา (ตัวอย่างเช่น println ใน Julia จะพิมพ์แล้วเพิ่มบรรทัดใหม่ที่ส่วนท้าย) แต่ไม่ควรเป็นส่วนหนึ่งของสตริง
เกลน O

1
@ ACarter - โดยทั่วไปใช่ แต่ข้อ จำกัด และการหักเงินทำให้เป็นเรื่องไม่สำคัญ
เกลน O

คำตอบ:


17

Perl - 96

(ค่อนข้างดีได้รับคะแนนสูงสุดตามทฤษฎี 97 คะแนน)

s{}[Hel0o, w3$=d!];y<"#%&'*.124578:?@BCDEFGIJKLMNOQ/-9>(
    6PRSTUVWXYZ^_`abfghjmqvxz|~\cAk-u)+print

(โปรดทราบว่าบรรทัดที่สองเริ่มต้นด้วย\tอักขระแท็บจริง)

รหัส 98 ตัวอักษรและมีทุกถ่าน ASCII -ครั้งว่าบวกเพิ่ม
98 - 2 = 96

ไม่มีตัวอักษรสตริงที่นี่ แต่การลบอักขระเดี่ยวใดๆ ทำให้โปรแกรมแตก

Deobfuscation

ในโปรแกรมนี้มี 3 statement (จริง ๆ แล้ว 2 แต่ฉันถูกทารุณกรรม+เป็นตัวแยกข้อความบางส่วน)

  1. s{}[Hel0o, w3$=d!]
    นี่เป็นกรณีที่ยืดออกมากของผู้ควบคุมรถ มันเขียนมากกว่าปกติเป็นs/a/b/หรือs:a:b:แต่ Perl ช่วยให้จินตนาการมากขึ้นที่นี่: และแม้กระทั่งs(a)(b) s(a)^b^ s(a)[b] มันแทนที่สตริงว่าง (ภายใน) ด้วย(ภายใน) ( แทรกตามค่าเริ่มต้น) เพราะขาดนั้นผู้ประกอบการจะดำเนินการในs qaqbq
    {}Hel0o w360d![]$=60~=$_

  2. y<"#%&'*.124578:?@BCDEFGIJKLMNOQ/-9>(\n\t6PRSTUVWXYZ^_`abfghjmqvxz|~\cAk-u)
    นี่เป็นกรณีที่ยืดออกมาก แต่เป็นtrตัวดำเนินการซึ่งเรียกอีกอย่างว่าy( y< >( ))
    ลองดูที่ตารางการแทนที่:
    " # %&'*.124578:?@BCDEFGIJKLMNOQ /-9
    \n\t6PRSTUVWXYZ^_`abfghjmqvxz|~\cA k-u
    ฉันย้ายตัวละครไปรอบ ๆ เพื่อให้สายอักขระที่มีอยู่ไม่ขาด ส่วนการทำงานเท่านั้นจริงที่นี่เป็นที่->/-9 k-uมันแทนที่0ด้วยl, 3มีoและมี6 อีกครั้งเนื่องจากไม่มีตัวดำเนินการมันทำงานบน ดังนั้นตอนนี้เรามีวลีที่สมบูรณ์ในตัวแปรr
    ~=$_
    $_

  3. print
    การไม่มีข้อโต้แย้งทำให้พิมพ์เพียง$_ตัวแปร


ฉันไม่รู้ Perl พอที่จะให้ความเห็นเกี่ยวกับเรื่องนี้ - ชุดของตัวละครระหว่าง <และ + กำลังทำอะไรอยู่?
เกลน O

@GlenO เท่านั้น/-9และk-uใช้เพื่อแปลงสตริง ส่วนที่เหลือเป็นขยะที่มีขนาดเท่ากัน หากคุณลบถ่านตัวเดียวออกชุดจะวางผิดแนวและโปรแกรมจะไม่แสดงผล "Hello, world!" อีกต่อไป
mniip

ในกรณีดังกล่าวการดำเนินการ "ขยะ" ในลักษณะใด นั่นคือมันทำงานอย่างไร? หากเป็นเพียงฟิลเลอร์ที่ถูกข้ามโดยรหัสแล้วมันก็เทียบเท่ากับรหัสที่ไม่ทำงานภายในเงื่อนไข
เกลน O

3
@GlenO มันไม่ใช่ ไปที่สเป็ค: การ<...> removal of any single counting character must change the result or cause the code to not function.ลบ 1 ตัวอักษรทุกที่ทำลายมัน คุณสามารถทำให้มันทำงานได้โดยการลบ 2 ตัวอักษร แต่นั่นไม่ได้อยู่ในกฎ
mniip

2
All code must be functional. คุณกำลังก้มกฎอย่างชัดเจนอย่างน้อยที่สุด ฉันไม่ได้พูดว่า "มันทำผิดกฎ" แต่ก็เป็นที่น่าสงสัยอย่างแน่นอน
เกลน O

7

คำตอบนี้ถูกสร้างขึ้นก่อนที่จะเพิ่มกฎเกี่ยวกับตัวอักษรสตริงและไม่เข้าร่วมในการแข่งขัน

#include <iostream>
int main(){std::cout<<56+"  !$%^&*?12347890-_QWERTYUIOPASDFGJKLZXVBNM,.qypfghjk:zvbHel\x6Co, world!";}

มันถูกกฎหมายอย่างสมบูรณ์ : P หากคุณลบอักขระใด ๆ ออกจากสตริงนั้นก็จะพิมพ์ออกello, world!มา


กรุณาใส่คะแนนรหัสของคุณในคำตอบของคุณ
ProgramFOX

นอกจากนี้มันจะไม่เปลี่ยนคะแนนของคุณ แต่<<ต้องลบช่องว่างรอบ ๆ
Martin Ender

1
อืม ... ในขณะที่ฉันปรบมือให้คำตอบของคุณมันได้เปิดเผยช่องโหว่เล็กน้อยในข้อ จำกัด ของฉัน ฉันจะให้ upvote กับคุณและฉันยินดีให้ผู้อื่นทำเช่นเดียวกันหากพวกเขาชอบ แต่ฉันจะแก้ไขข้อ จำกัด เพิ่มเติม
เกลน O

1
ตกลงนอกเหนือจากความคิดเห็นก่อนหน้าของฉันตอนนี้ฉันได้เพิ่มข้อ จำกัด ที่ระบุว่าสตริงและตัวอักษรตัวอักษรจะต้องเกี่ยวข้อง - การแทนที่ตัวละครในพวกเขาจะต้องสามารถเปลี่ยนผล ซึ่งอนุญาตให้if 'x'>'w'ใช้เทคนิคได้ แต่บล็อก "k \ bH" เป็นผลลัพธ์ใน "H" เป็นต้น อย่าลังเลที่จะมีส่วนร่วมคำตอบที่สองตามข้อ จำกัด ที่เพิ่มเข้ามา
เกลน O

4

CJam, 94

{'H"EJO, WoRLD!"el96A+c/~_-3=0$@}"# 
`&^<>|;:?.()[]\1aBCdfFgGhiIjkKmMnNpPqQrsStTuUvVwxXyYzZ"254b87%*

ลองออนไลน์! โปรดทราบว่าควรมีตัวจัดรูปแบบอยู่ตรงหน้าตัวป้อนบรรทัด SE ไม่ชอบ tabulators ดังนั้นคุณจะต้องแทรกมันเอง

  • ความยาว 100 ตัวอักษร
  • ซ้ำ alnum: -0 ()
  • เครื่องหมายวรรคตอนซ้ำแล้วซ้ำอีก: -6 ("" ")
  • ทำซ้ำอื่น ๆ : -0 ()
  • ช่องว่างซ้ำ: -0 ()

คะแนนรวม: 94

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

"#  
`&^<>|;:?.()[]\1aBCdfFgGhiIjkKmMnNpPqQrsStTuUvVwxXyYzZ"
:A,,{_A\<A@)>+254b87%}%`

มันพิมพ์อาร์เรย์ที่แสดงจำนวนครั้งที่Hello โลก! จะได้รับการพิมพ์ถ้าตัวละครที่เกี่ยวข้องกับดัชนีถูกลบออก


เมื่อฉันรันมันในลิงค์ของคุณมันจะสร้าง "สวัสดีโลก!" หกครั้งติดต่อกัน นอกจากนี้สตริงของตัวละครทำอะไร?
เกลน O

ฉันเดาว่าบรรทัดใหม่เป็นความผิดพลาด - การลบมันทำให้ทำงานได้
เกลน O

ปัญหาการคัดลอกวาง ควรมี tabulator ก่อน LF ดูเหมือนว่า SE จะไม่ปล่อยให้ฉันทำ ... สตริงถือเป็นตัวเลขฐาน 254 ( 254b) โมดูลัสผลลัพธ์สุดท้าย 7 ควรเป็น 1 ดังนั้นการใช้โค้ดบล็อกก่อนหน้านี้หนึ่งครั้ง ฉันต้องการโมดูลัสเพื่อทำให้ตัวละครแต่ละตัวจำเป็น
Dennis

ดีหลังจากการเพิ่มในแท็บหายไป (ซึ่งไม่ "แก้ไข" รหัส) เอาZที่Tหรืออาจจะเป็นตัวละครอื่น ๆ ไม่กี่จะไม่เปลี่ยนแปลงผล
เกลน O

ฉันตีความคำถามของคุณไปอย่างผิด ๆ ตอนนี้ได้รับการแก้ไขแล้ว
Dennis

3

ทับทิม, 28 41

เพียงเพื่อเริ่มต้นคำตอบด้วยการแก้ปัญหาในจิตวิญญาณของคำถาม:

print"He#{?l*2}o, "+'world!'if[$`&(9<=>6)^7|~8-5/3.1%0x4]

เกณฑ์การให้คะแนน (ฉันคิดว่าฉันได้รับสิทธินี้):

  • ความยาว 57 อักขระ
  • ซ้ำ alnum: -12 ( orli)
  • เครื่องหมายวรรคตอนซ้ำแล้วซ้ำอีก: -4 ( "')
  • ทำซ้ำอื่น ๆ : -0
  • ช่องว่างซ้ำ: -0

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

.ใน3.1สามารถถอดออกได้โดยไม่มีปัญหา ในฐานะที่สามารถxใน0x4หรือใน- 8-5

3

PHP, 1 (ใช่, จุดเดียว!)

การใช้อักขระเวทย์มนตร์เพื่อสร้างการตรวจสอบซึ่งในรูปแบบไบนารีตรงกับ "นรก", "o, w", "orld" และ "!"

ปกติแล้วฉันชอบหาช่องโหว่ แต่คราวนี้ฉันตัดสินใจที่จะเล่นด้วยจิตวิญญาณและความตั้งใจของการประกวด ตัวละครทุกตัวและตำแหน่งของมันมีความสำคัญต่อเอาท์พุท สถานที่เดียวที่คุณสามารถแทนที่ได้คือชื่อตัวแปรที่ไม่ใช่ค่าที่แท้จริงช่องว่างระหว่างphpและforeachที่PHPถือว่าเท่ากันและการใช้'vs "ที่PHPถือว่าเหมือนกัน

<?php foreach(array('_MC:`~+V4@SbHR/l[J','dN#UB`5!Rv^NG@D}','9gm6L&-kuD','8OM97g.q]XQ0')as$j)print(hash("crc32",$j,1))?>

FYI, นี่คือสายมายากลและความน่าสนใจอื่น ๆ :

E.D}S:  Hell
9UDIRQ: Hell
N\7&*`%:    orld
UWX[E^O:    orld
mAHzDEb:    !   
uLJ7Ck&:    Hell
B+bG5mYJ:   Hell
:OvMzuOR:   !   
TgYR9g!6k:  o, w
NkFN`!8mI:  o, w
N#VA\j~}J[: Hell
vEl*]@0XQ5: o, w
9gm6L&-kuD: orld
*}{Xg@HN`\: !   
Pj@Y44uA6YJ:    Hell
|7OX0VF8gv}:    !   
DLRJAjgMj}\:    !   
!0bT*D}O4Lw:    orld
YGN97^v7ZY`:    Hell
++~bL/kP:|]W:   o, w
8OM97g.q]XQ0:   !   
l^m-DqZ^g[&+:   !   
Ewu]Rv~*DHQ7:   Hell
JIqjgF|S!\`8l:  Hell
b4l!MEG7vTu6/:  Hell
+B:zEq*J\k-Cm:  !   
_}E7wZD76^`Y9AU:    orld
q:Nq-~+_S7~N9Hz:    !   

ฟังก์ชั่นรหัสยังถ้าฉันลบ\t, \nหรือพื้นที่ ไม่ใช่ผู้เชี่ยวชาญ PHP แต่;ดูเหมือนจะเป็นตัวเลือกเช่นกัน
mniip

@mniip - แก้ไขแล้ว ฉันไม่ทราบว่าเครื่องหมายอัฒภาคเป็นตัวเลือกในบางกรณี

3

Befunge-98 , 97 คะแนน!

"v!dlrow ,h
B[CDEFGIJkLMNOPH
$<QRSTUV@|5cg1fe':-%\64*ab+7_/89}{0  j2
WXYZK`.=#>]
s()impq	n 3~
Atuxz&;y^ ?

ลองออนไลน์!

แท็บอยู่ระหว่างและqn

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

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

จริงๆแล้วส่วนที่ดำเนินการเพียงอย่างเดียวดูเหมือนว่า:

"v!dlrow ,h
         k     H
$<      @|5cg1fe':-%\64*ab+7
         >]
        ^ ?

ก่อนอื่นจะใช้สตริงการตัดตามตัวอักษรเพื่อเพิ่มลง, world!ในสแต็ก นี่หลีกเลี่ยงสอง"วิ

$<      @|5cg1fe':-%\64*ab+7

เพิ่มHelloไปยังสแต็กโดยใช้วิธีการที่หลากหลายเพื่อหลีกเลี่ยงอักขระที่ซ้ำกัน $ดึงที่ว่างส่วนเกินที่เกิดจากการตัดสตริงตามตัวอักษร

7+เพิ่ม 7 ไป จากจุดสิ้นสุดของตัวอักษรสตริงเพื่อสร้าง h คำนวณ 111, ค่า ascii ของและทำซ้ำoba*46\%:l

'e เพิ่ม e ในสแต็ก

f1g รับตัวละครที่ 1,15 ซึ่งก็คือ H

จากนั้นก็ reuses ในสตริงจะพิมพ์ออกมาทั้งหมด, ที่เหลือก็เป็นเพียงการเปลี่ยนแปลงทิศทางเพื่อนำทางไปยังตอนจบHello, world!@


1

ทับทิม, 78

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

puts('Hello, world!')if%["\#$&*+-/:;<>?@ABCDEFGIJKLMNOPQRSTUVWXYZ^_`abcghjknqvxyz{|}~123].sum==4980

3
ปัญหาคือทุกอย่างหลังจากและรวมถึงifสามารถลบออกได้
Seequ

@TheRare - ไม่มีอะไรผิดปกติตราบใดที่ifมันใช้งานได้จริงและสิ่งต่าง ๆ หลังจากที่มันยังคงเป็นไปตามกฎ
เกลน O

@GlenO แต่มันไม่ถูกนับว่าเป็น "รหัสที่ถอดออกได้" เพียงแค่puts('Hello, world!')จะทำงาน ฉันคิดว่ากฎต้องชี้แจงหากเป็นสิ่งที่ถูกต้อง
seequ

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

@GlenO คุณเป็นผู้ตัดสิน แค่ขอให้ฉันลบความคิดเห็นเหล่านี้ถ้าคุณรู้สึกว่าไม่จำเป็น
seequ

1

PHP, 2257

ช่องโหว่: แบ็กสแลชถูกตัดออกจากข้อกำหนดและเครื่องคำนวณคะแนน!

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

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

<?php foreach(array('\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')as$x)print(chr(substr_count($x,"\\")))?>

เห็นได้ชัดว่าไม่มีอะไรมากไปกว่าการพิมพ์ผิดในคำอธิบายไม่ใช่ช่องโหว่ ยิ่งไปกว่านั้นคุณรู้แล้ว คำอธิบายไม่ได้พูดว่า "อักขระ ASCII อื่น ๆ " อย่างชัดเจน เมื่อคุณอ่านข้อความนี้จะมีการแก้ไขเพื่อรวมไว้
เกลน O

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

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

1

Befunge - 87

"dlrow ,olleH"bk,                                                                   v
!#$%&'()*+-./0123456789:;  <=>?ABCDEFGIJKLMNOPQRSTUVWXYZ[\]^_`acfghijmnpqstuvxyz{|}~@

บรรทัดแรกมีค่าสี่คะแนนเนื่องจากการทำซ้ำทั้งหมด แต่ไม่มีอักขระที่ซ้ำกันในบรรทัดที่สอง สตริงตัวอักษรเท่านั้นในรหัสนี้คือdlrow ,olleHซึ่งได้รับการย้อนกลับและพิมพ์ออก การลบอักขระตัวใดตัวหนึ่งจะยกเลิกการเชื่อมต่อvที่ส่วนท้ายของบรรทัดแรกจาก@ตอนท้ายของวินาทีทำให้โปรแกรมไม่สิ้นสุด หากvตัวเองถูกลบออกแล้วรหัสจะเข้าสู่วงไม่สิ้นสุดพิมพ์ผลลัพธ์ที่ถูกต้อง



0

Acc !!, -138 (และใช่นั่นคือลบ 138)

แม้ว่านี่อาจไม่ใช่คะแนนที่ดีที่สุดที่ฉันเคยได้รับใน PPCG แต่ฉันสงสัยว่ามันจะสูงกว่านี้ในAcc !!

108
Write 72
Write 101
Count i while i-2 {
	Write _
}
Write _+3
Write 44
Write 32
Write 119
Write 111
Write 114
Write _
Write 100
Write 33

ลองออนไลน์!

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