โลกสิ้นสุดลงในเอ็ด


21

ถ่ายโดยตรงจากการประกวดการเขียนโปรแกรม ACM Winter 2013 คุณเป็นคนที่ชอบทำสิ่งต่าง ๆ อย่างแท้จริง ดังนั้นสำหรับคุณการสิ้นสุดของโลกจึงเป็นเอ็ด ตัวอักษรสุดท้ายของ "The" และ "World" เรียงต่อกัน

จัดทำโปรแกรมที่ใช้ประโยคและพิมพ์ตัวอักษรสุดท้ายของแต่ละคำในประโยคนั้นให้มีพื้นที่น้อยที่สุดเท่าที่จะเป็นไปได้ คำจะถูกคั่นด้วยอะไรก็ได้ยกเว้นตัวอักษรจากตัวอักษร (65 - 90, 97 - 122 บนตาราง ASCII) นั่นหมายถึงขีดล่างเครื่องหมายตัวหนอนหลุมฝังศพเครื่องหมายวงเล็บปีกกา ฯลฯ เป็นตัวคั่น แต่ละคำมีตัวคั่นมากกว่าหนึ่งตัว

asdf jkl;__zxcv~< vbnm,.qwer| |uiop-> flvmrp
pigs, eat dogs; eat Bob: eat pigs-> ststbts
looc si siht ,gnitirw esreveR-> citwR
99_bottles_of_beer_on_the_wall->sfrnel


คุณสามารถเพิ่มกรณีทดสอบรวมถึงตัวเลขและขีดล่างได้หรือไม่
grc

10
โลกจะจบลงในเอ็ด? ฉันรู้ว่าเป็นกลุ่มและ Emacs ไม่สามารถวัดได้!
Joe Z.

การเรียงความ“ คนแท้จริงใช้ ed” เป็นส่วนหนึ่งของการแจกแจงของ Emac ตราบใดที่ฉันจำได้
JB

อินพุตจะเป็น ASCII เท่านั้นหรือไม่
Phil H

คำตอบ:


16

Perl 5, 18 ไบต์

s/\pL*(\pL)|./$1/g

ต้องการ-pสวิตช์บรรทัดคำสั่ง คุณสมบัติที่มีชื่อLตรงกับอักขระตัวอักษรA-Za-zเท่านั้น มีคุณสมบัติที่มีชื่อหลายร้อยตัวแต่เมื่อจัดการกับข้อความ ASCII มีคุณสมบัติน้อยมากที่น่าสนใจ นอกจากนี้\pLอีกหนึ่งบันทึกจริงอื่น ๆ คือ\pPซึ่งตรงกับเครื่องหมายวรรคตอน

ลองออนไลน์!


Perl 5, 17 ไบต์

การปรับปรุงหนึ่งไบต์โดยDom Hastings

print/\pL*(\pL)/g

ต้องการ-n(และ-lเพื่อรองรับอินพุตหลายอินพุต)

ลองออนไลน์!


ตัวอย่างการใช้งาน

$ more in.dat
asdf jkl;__zxcv~< vbnm,.qwer| |uiop
pigs, eat dogs; eat Bob: eat pigs
looc si siht ,gnitirw esreveR
99_bottles_of_beer_on_the_wall

$ perl -p ends-in-ed.pl < in.dat
flvmrp
ststbts
citwR
sfrnel

ฉันคิดว่า\wยังตรงกับหลักและขีดล่าง
grc

อืมแน่นอน ที่จะต้องมีการอัพเดท
primo

2
สุกใส Regex เป็นทางออกที่ชัดเจน แต่|.ไม่ชัดเจน (สำหรับฉันอย่างน้อย)
Peter Taylor

1
เพิ่งสังเกตเห็น-1ในprint/\pL*(\pL)/gดูเหมือนว่าจะส่งออกเดียวกันสำหรับกรณีทดสอบของคุณ!
Dom Hastings

18

ed, 35 ตัวอักษร

s/[a-zA-Z]*\([a-zA-Z]\)\|./\1/g
p
Q

ดังนั้นโลกจึงสิ้นสุดลงในเอ็ด ขณะที่ผมชอบที่จะเป็นตัวอักษรเกินไปฉันตัดสินใจที่จะเขียนจะเขียนแก้ปัญหาด้วยเอ็ด - และเห็นได้ชัดว่ามันเป็นจริงการเขียนโปรแกรมภาษา มันสั้นอย่างน่าประหลาดใจแม้จะพิจารณาวิธีแก้ปัญหาสั้น ๆ ที่มีอยู่แล้วในเธรดนี้ มันจะดีกว่าถ้าฉันสามารถใช้สิ่งอื่นนอกเหนือจาก[a-zA-Z]นี้ได้ แต่การพิจารณา ed ไม่ใช่ภาษาการเขียนโปรแกรมมันดีพอจริง ๆ

ก่อนอื่นฉันอยากจะบอกว่านี่แค่แยกวิเคราะห์บรรทัดสุดท้ายในไฟล์ มันจะเป็นไปได้ที่จะแยกวิเคราะห์เพิ่มเติมเพียงพิมพ์,ที่จุดเริ่มต้นของสองบรรทัดแรก (ช่วงนี้ "ทุกอย่าง" ที่ระบุซึ่งตรงข้ามกับช่วงบรรทัดสุดท้ายมาตรฐาน) แต่ที่จะเพิ่มขนาดรหัสถึง 37 ตัวอักษร

ตอนนี้สำหรับคำอธิบาย บรรทัดแรกทำในสิ่งที่โซลูชัน Perl ทำ (ยกเว้นโดยไม่สนับสนุนอักขระ Unicode) ฉันไม่ได้คัดลอกโซลูชัน Perl ฉันเพิ่งคิดค้นสิ่งที่คล้ายกันโดยบังเอิญ

บรรทัดที่สองพิมพ์บรรทัดสุดท้ายดังนั้นคุณจะเห็นผลลัพธ์ บรรทัดที่สามบังคับให้ออก - ฉันต้องทำมิฉะนั้นedจะพิมพ์?เพื่อเตือนคุณว่าคุณไม่ได้บันทึกไฟล์

ตอนนี้สำหรับวิธีดำเนินการ มันง่ายมาก เพียงเรียกใช้edไฟล์ที่มีกรณีทดสอบในขณะที่ไพพ์โปรแกรมของฉันแบบนั้น

ed -s testcase < program

-sเงียบ สิ่งนี้จะป้องกันมิให้edแสดงผลขนาดไฟล์ที่น่าเกลียดตั้งแต่เริ่มต้น ท้ายที่สุดฉันใช้มันเป็นสคริปต์ไม่ใช่โปรแกรมแก้ไขดังนั้นฉันไม่ต้องการข้อมูลเมตา หากฉันไม่ทำเช่นนั้นเอ็ดจะแสดงขนาดไฟล์ที่ฉันไม่สามารถป้องกันได้


ฉันติดตั้งเอ็ดเพื่อลองสิ่งนี้
primo

6

Javascript, 49

alert(prompt().replace(/.(?=[a-z])|[^a-z]/gi,''))

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

ขอขอบคุณที่tomsmedingสำหรับการปรับปรุงที่ดี


3
คุณสามารถปรับปรุงสิ่งนี้ได้โดยสร้างตัวพิมพ์เล็กและตัวพิมพ์เล็กเช่น:alert(prompt().replace(/.(?=[a-z])|[^a-z]/gi,''))
tomsmeding

6

C, 78

แข็งแรงเล่นกอล์ฟ:

main(int c,char**s){for(;c=*s[1]++;)isalpha(c)&&!isalpha(*s[1])?putchar(c):0;}

ด้วยช่องว่าง:

main(int c,char**s)
{
  for(;c=*s[1]++;)
    isalpha(c)&&!isalpha(*s[1])?putchar(c):0;
}

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


1
คุณสามารถบันทึก 4 ไบต์โดยใช้การประกาศ K&R และการผิดนัดc:main(c,s)char**s;{for
Toby Speight

5

GNU Sed, 40 38 37

s/[a-z]\b/&\n/g; s/[^\n]*\(.\)\n/\1/g

การทดสอบ

cat << EOF > data.txt
asdf jkl;__zxcv~< vbnm,.qwer| |uiop
pigs, eat dogs; eat Bob: eat pigs
looc si siht ,gnitirw esreveR
EOF

เรียกใช้ sed:

sed 's/[A-Za-z]\b/&\n/gi; s/[^\n]*\(.\)\n/\1/g' data.txt

เอาท์พุท:

flvmrp
ststbts
citwR

คำอธิบาย

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

แก้ไข

  • ใช้ธงกรณีตาย (-2) ขอบคุณmanatwork
  • อย่านับช่องว่าง (-1)

sedของsคำสั่งมีธงสำหรับกรณีที่ตรงกับความรู้สึก:i s/[a-z]\b/&\n/gi
จัดการ

@ การทำงาน: ดีจุดนี้จะทำให้ GNU sed เท่านั้น แต่ดูเหมือนว่ามันเป็นแล้วขอบคุณ
Thor

\bถือว่า_เป็นตัวอักษรดังนั้นหากคำใด ๆ ในการทดสอบจบด้วย_ตัวอักษรสุดท้ายของคำนั้นไม่รวมอยู่ในผลลัพธ์
Marty Neal

3

Grep and Paste, 36 34 28

> echo 'asdf jkl;__zxcv~< vbnm,.qwer| |uiop' | grep -io '[a-z]\b' | tr -d \\n
flvmrp

> echo 'pigs, eat dogs; eat Bob: eat pigs'   | grep -io '[a-z]\b' | tr -d \\n
ststbts

echo 'looc si siht ,gnitirw esreveR'         | grep -io '[a-z]\b' | tr -d \\n
citwR

หากสุดท้ายบรรทัดใหม่เป็นสิ่งจำเป็นแทนที่ด้วยtr -d \\npaste -sd ''

แก้ไข

  • ใช้ grep กรณีตาย (-2) ขอบคุณmanatwork
  • ใช้trแทนpaste(-4) ขอบคุณmanatwork
  • อย่านับช่องว่างรอบ ๆ ท่อ (-2)

ค่อนข้างสร้างสรรค์กับสิ่งpaste -sd ''นั้น แต่tr -d \\nสั้นกว่า เกี่ยวกับgrepมันมี-iสวิทช์ความหมาย“ละเว้นกรณี” grep -io '[a-z]\b'ซึ่งสามารถทำให้มันสั้น:
จัดการ

@ manatwork trลบ newline สุดท้ายด้วย โหมดตัวพิมพ์เล็กและตัวพิมพ์ใหญ่แน่นอนว่าสั้นลงขอบคุณ
Thor

ไม่มีกฎที่ต้องขึ้นบรรทัดใหม่ขั้นสุดท้าย
จัดการ

@ การทำงาน: ฉันสามารถเห็นด้วยกับคำตอบที่ปรับปรุง
Thor

3

sed, 37 ตัวอักษร

ความยาวเท่ากับคำตอบของ Thorแต่ฉันคิดว่าง่ายกว่า

s/[a-z]*\([a-z]\)/\1/ig;s/[^a-z]*//ig

ตรรกะค่อนข้างเล็กน้อย - แทนที่ลำดับตัวอักษรด้วยตัวอักษรสุดท้ายจากนั้นลบตัวอักษรที่ไม่ใช่ทั้งหมด


3

Mathematica, 39

""<>StringCases[#,(__~~x_)?LetterQ:>x]&

ทดสอบ:

""<>StringCases[#,(__~~x_)?LetterQ:>x]& /@
 {"asdf jkl;__zxcv~< vbnm,.qwer| |uiop",
  "pigs, eat dogs; eat Bob: eat pigs",
  "looc si siht ,gnitirw esreveR",
  "99_bottles_of_beer_on_the_wall"}
{"flvmrp", "ststbts", "citwR", "sfrnel"}

สิ่งที่ดี. LetterQควรเรียกว่าLettersQ:) ฉันไม่ได้คิดถึงมันเพื่อทดสอบสตริงทั้งหมด
ดร. เบลิซา

@belisarius จริงๆแล้วด้วยโครงสร้างนี้มันถูกใช้กับตัวละครที่ฉลาดดังนั้นมันจึงอาจเป็น "LetterQ" ที่แท้จริงและยังคงใช้ได้
Mr.Wizard

2

K, 49

{last'f@&"b"$#:'f:"|"\:@[x;&~x in,/.Q`a`A;:;"|"]}

.

k){last'f@&"b"$#:'f:"|"\:@[x;&~x in,/.Q`a`A;:;"|"]}"asdf jkl;__zxcv~< vbnm,.qwer| |uiop"
"flvmrp"
k){last'f@&"b"$#:'f:"|"\:@[x;&~x in,/.Q`a`A;:;"|"]}"pigs, eat dogs; eat Bob: eat pigs"
"ststbts"
k){last'f@&"b"$#:'f:"|"\:@[x;&~x in,/.Q`a`A;:;"|"]}"looc si siht ,gnitirw esreveR"
"citwR"

2

สกาลา, 59 (หรือ 43)

สมมติว่าสตริงมีอยู่แล้วในs:

s.split("[^a-zA-Z]+").map(_.last).mkString

หากคุณต้องการที่จะอ่านจากพรอมต์และพิมพ์แทนที่จะใช้การส่งออก REPL แปลงsไปreadLineและห่อในprintln()59


2

x86: 54 ไบต์

สมมติรูทีนcdeclด้วยลายเซ็นvoid world_end(char *input, char *output):

60 8b 74 24 24 8b 7c 24 28 33 d2 8a 0e 8a c1 24
df 3c 41 72 08 3c 5a 77 04 8a d1 eb 09 84 d2 74
05 88 17 47 33 d2 46 84 c9 75 e0 84 d2 74 03 88
17 47 88 0f 61 c3

1
โดยวิธีการที่ฉันตระหนักถึงคำถามที่ขอโปรแกรมและไม่ใช่งานประจำแต่ฉันต้องการที่จะทำสิ่งที่แตกต่าง ตรงกันข้ามกับคำแถลงปัญหาฉันคิดว่าฉันไม่ใช่ "คนที่ชอบทำสิ่งต่าง ๆ " อย่างแท้จริง : P
user1354557

2

Xi, 32

println$ @{=>.-1}<>input re"\W+"

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


2

Mathematica 62 57 52

Row@StringTake[StringCases[#,LetterCharacter..],-1]&

การทดสอบ

l = {"asdf jkl;__zxcv~<vbnm,.qwer| |uiop", 
     "pigs,eat dogs;eat Bob:eat pigs", 
     "looc si siht,gnitirw esreveR"}

Row@StringTake[StringCases[#,LetterCharacter..],-1]&/@ l
(*{flvmrp,ststbts,citwR}*)

ฉันแก้ไขของคุณผิดพลาด แต่แล้วก็ย้อนกลับ อ๊ะ
DavidC


2

Python 76 ตัวอักษร

import re;print "".join(re.findall("([a-zA-Z])(?=$|[^a-zA-Z])",raw_input()))


printคุณสามารถลบพื้นที่หลัง
flornquake

ย่อให้สั้นลงโดยการย้ายไปยัง Python 3:import re;print(*re.findall("([a-zA-Z])(?=$|[^a-zA-Z])",input()),sep='')
Steven Rumbalski

1

Python 3.x, 64 ไบต์

import re;print(''.join(a[-1] for a in re.split('\W+',input())))

2
ตัวอย่างสุดท้ายไม่ทำงาน นอกจากนี้ข้อผิดพลาดจะเกิดขึ้นหากบรรทัดเริ่มต้นหรือลงท้ายด้วยตัวคั่น
AMK

forคุณสามารถลบพื้นที่ก่อน
Bakuriu


1

Mathematica 71 47 45 61

กลับไปที่กระดานวาดภาพหลังจาก @belisarius พบข้อผิดพลาดในรหัส

StringCases[#, RegularExpression["[A-Za-z](?![A-Za-z])"]] <> "" &

การทดสอบ

l = {"asdf jkl;__zxcv~<vbnm,.qwer| |uiop", "asdf jkl__zxcv~<vbnm,.qwer| |uiop", 
"pigs,eat dogs;eat Bob:eat pigs", "looc si siht,gnitirw esreveR"};

StringCases[#, RegularExpression["[A-Za-z](?![A-Za-z])"]] <> "" & /@ l

{"flvmrp", "flvmrp", "ststbts", "citwR"}


\\wไม้ขีดไฟ_ดังนั้นมันจึงใช้ไม่ได้กับ (ตัวอย่าง)"asdf jkl__zxcv~<vbnm,.qwer| |uiop"
ดร. เบลิซา

รอRow@StringTake[ StringCases[#, LetterCharacter ..], -1] &@"asdf jkl__zxcv~<vbnm,.qwer| |uiop"ให้ฉันflvmrpแต่#~StringCases~RegularExpression@"\\w\\b" <> "" &@"asdf jkl__zxcv~<vbnm,.qwer| |uiop"กลับมาfvmrpที่นี่ เราได้รับผลลัพธ์เดียวกันหรือไม่?
ดร. เบลิซา

@belisarius คุณถูกต้องเกี่ยวกับข้อผิดพลาดในรุ่นก่อนหน้าของฉัน ฉันกำลังทดสอบมันด้วยสายอักขระผิด!
DavidC

Hehe +1 อีกครั้ง
ดร. เบลิซา

@ คนที่เชื่อว่าชาวเบลารุสโปรดดูคำตอบที่ฉันโพสต์ ถ้าถูกต้องมันสั้นกว่า
Mr.Wizard

1

Python 2, 88 80 75 69 68

s=p=''
for c in raw_input()+' ':a=c.isalpha();s+=p[a:];p=c*a
print s

การป้อนข้อมูล: 435_ASDC__uio;|d re;fG o55677jkl..f

เอาท์พุท: CodeGolf


วิธีการแก้ปัญหานี้สามารถสั้นลงได้ถึง67ตัวอักษรหากคุณอนุญาตให้เอาท์พุทที่จะรวมตัวอักษร Backspace (รหัส ASCII 8) ที่จุดเริ่มต้น ผลลัพธ์จะเหมือนกันทางสายตา

s=p='<BS>'
for c in raw_input()+p:a=c.isalpha();s+=p[a:];p=c*a
print s

อินพุตเดียวกัน, เอาต์พุตเดียวกัน (มองเห็น) <BS>มีความหมายที่จะเป็นตัวอักษร Backspace


1

C #

วิธีการ105ไบต์: (ถือว่าเป็นการใช้ระบบ, System.Text.RegularExpressions และ System.Linq)

string R(string i){return string.Concat(Regex.Split(i,"[^a-zA-Z]").Where(x=>x!="").Select(n=>n.Last()));}

โปรแกรม211ไบต์:

using System;using System.Text.RegularExpressions;using System.Linq;class A{static void Main(){Console.WriteLine(string.Concat(Regex.Split(Console.ReadLine(),"[^a-zA-Z]").Where(x=>x!="").Select(n=>n.Last())));}}

1

VBA, 147 161

Sub a(s)
For n=0 To 255:m=Chr(n):s=Replace(s,IIf(m Like"[A-Za-z]","",m)," "):Next
For Each r In Split(s," "):t=t & Right(r,1):Next
MsgBox t
End Sub

1

Ruby 2.0, 25 (+1) ตัวอักษร

gsub(/(\w+)\W*/){$1[-1]}

จะต้องรันด้วย-pสวิตช์:

 $ ruby -p ed.rb <<< "asdf jkl;__zxcv~< vbnm,.qwer| |uiop"
flvmrp

โปรดระบุrubyรุ่น 1.9.2 เอาต์พุต“ # <ตัวแจงนับ: 0x9f65e10> # <ตัวระบุ: 0x9f65d98> # <ตัวระบุ: 0x9f65d34> # <ตัวระบุ: 0x9f65cd0>”
จัดการ

คุณถูก. ฉันลืมไปแล้วว่าติดตั้งไว้ แต่เวอร์ชั่น Ruby ปัจจุบันของฉันคือ 2.0 ( ruby 2.0.0p0 (2013-02-24 revision 39474) เมื่อรันโปรแกรมด้วยรุ่น 1.8.7 มันจะส่งออกค่า ASCII! ไม่ทราบว่ามีความแตกต่างมากมายระหว่างรุ่น
daniero

ขอบคุณจะต้องอัปเดต Ruby ของฉันอย่างแน่นอน (ทั้งล่ามและความรู้) ไม่จำเป็นต้องใช้กลุ่มการดักจับที่สอง: gsub(/(\w+)\W*/){$1[-1]}.
จัดการ

โอ้แน่นอนมันไม่ใช่ ขอขอบคุณอัปเดต :)
daniero



1

Java 8, 43 ไบต์

s->s.replaceAll("(?i).(?=[a-z])|[^a-z]","")

คำตอบของ Retina @ @ mbomb007ของพอร์ตคำตอบ

คำอธิบาย:

ลองออนไลน์

s->  // Method with String as both parameter and return-type
  s.replaceAll("(?i).(?=[a-z])|[^a-z]","")
     //  Remove every match of this regex, and return as result

คำอธิบายเพิ่มเติมสำหรับ regex:

"(?i).(?=[a-z])|[^a-z]"  // Main regex to match
 (?i)                    //  Case insensitive
     .                   //   Any character
      (?=[a-z])          //   Followed by a letter (as positive look-ahead)
               |[^a-z]   //   or a non-letter

""                       // Replace it with: nothing

1
ที่จริงแล้ว(?i)สำหรับธง
Jakob

0

Smalltalk , Squeak / Pharo flavor
122 char ด้วยการจัดรูปแบบดั้งเดิมสำหรับวิธีนี้เพิ่มลงใน String:

endOfWords
    ^(self subStrings: (CharacterSet allCharacters select: #isLetter) complement) collect: #last as: String

62 chars ใน Pharo 1.4 พร้อมการจัดรูปแบบ regex และแปลก

endOfWords^''join:(self regex:'[a-zA-Z]+'matchesCollect:#last)

0

J: 60 ตัวอักษร (หรือ 38 ตัวสำหรับรุ่นที่ถูกต้องน้อยกว่า)

(#~e.&(,26&{.&(}.&a.)"0(97 65))){:&>;:]`(' '"_)@.(e.&'_:')"0

หากเรายินดีให้โปรแกรมแตกเมื่อใดก็ตามที่มีคำที่ลงท้ายด้วยเครื่องหมายโคลอนหรือเครื่องหมายขีดล่างเราสามารถทำให้ความยาวของอักขระ 38 ตัวง่ายขึ้น

(#~e.&(,26&{.&(}.&a.)"0(97 65))){:&>;:

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

    (#~e.&(,26&{.&(}.&a.)"0(97 65))){:&>;:]`(' '"_)@.(e.&'_:')"0'asdf jkl;__zxcv~< vbnm,.qwer| |uiop'
flvmrp
    (#~e.&(,26&{.&(}.&a.)"0(97 65))){:&>;:]`(' '"_)@.(e.&'_:')"0'pigs, eat dogs; eat Bob: eat pigs'
ststbts
    (#~e.&(,26&{.&(}.&a.)"0(97 65))){:&>;:]`(' '"_)@.(e.&'_:')"0'99_bottles_of_beer_on_the_wall'
sfrnel

1
38 ไบต์ (สำหรับรุ่นที่ถูกต้อง): (#~[:2&|64 90 96 122&I.@(u:inv)){:&>;:หรือ 43 ไบต์สำหรับรุ่นที่ไม่ชัดเจน: (#~[:2&|64 90 96 122&I.@(u:inv))@:({:@>)@;:. สิ่งนี้ใช้กริยาดัชนีช่วงเวลาI.ซึ่งตีความ64 90 96 122ว่าเป็นชุดของช่วงเวลา(__, 64] (64, 90], (90, 96], (96, 122], (122, _)และส่งกลับดัชนีของ iterval ซึ่งอาร์กิวเมนต์ของมันคือรหัส ascii ของถ่าน หากดัชนีนี้เป็นคี่มันไม่ได้เรียงตามตัวอักษร
Bolce Bussiere

@BolceBussiere ไม่ทำงานกับขีดล่างด้วยเหตุผลบางอย่าง (กรณีทดสอบล่าสุด)
FrownyFrog

@ FronyFrog อาฉันเห็นว่าทำไม;:ตีความabc_เป็นหนึ่งคำเนื่องจากชื่อตัวแปรสามารถมีขีดล่าง เพิ่ม +10 ไบต์(#~~:&'_')อาจแก้ไขได้อย่างมีประสิทธิภาพ
Bolce Bussiere

@BolceBussiere นั่นเป็นเพียง'_'-.~หรือสิ่งที่คล้ายกัน
FrownyFrog

0

มันอยู่ในPHP 197ไบต์ :( ฉันเริ่มต้น

$l=$_GET['line'];
$l=preg_replace('/(\W|_)+/',' ',$l);
$s=explode(' ',$l);
foreach($s as $d){
$a=substr($d,-1,1);
$o=ORD($a);
if(($o>=97 && $o<=122) || ($o>=65 && $o<=90)){
echo $a;
  }
}

แก้ไข ตอนนี้ก็171 ไบต์

<?$l=$_GET['l'];$l=preg_replace('/(\W|_)+/',' ',$l);$s=explode(' ',$l);foreach($s as $d){$a=substr($d,-1,1);$o=ORD($a);if(($o>=97&&$o<=122)||($o>=65&&$o<=90)){echo$a;}}

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

1
แก้ไขมันขอบคุณที่บอกฉันฉันใหม่ที่นี่
Sasori

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

foreach((' ',preg_replace('/(\W|_)+/',' ',$_GET['line'])) as $d){$a=substr($d,-1,1);$o=ORD();if(($o>=97 && $o<=122) || ($o>=65 && $o<=90)){echo $a;}}คือ 149 ถ้าใช้งานได้
Magic Octopus Urn

\W|_ไม่รวมตัวเลข ดังนั้นคุณควรเพิ่ม\dใน regex หรือการใช้งานของคุณ/[^a-z]+/i
Titus

0

K 30

q)k)f:{x@&-1=-':(1_x," ")in,/.Q`a`A}
q)f "asdf jkl;__zxcv~< vbnm,.qwer| |uiop"
"flvmrp"
q)f "pigs, eat dogs; eat Bob: eat pigs"
"ststbts"
q)f "looc si siht ,gnitirw esreveR"
"citwR"
q)f "99_bottles_of_beer_on_the_wall"
"sfrnel"

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