CodeGolf - ละเว้นเสียง # 1


15

คำแนะนำ

Barry เป็นผู้พัฒนาแบ็กเอนด์ที่ไม่ค่อยดีนักที่รับผิดชอบ API ขนาดเล็กที่ควรให้ข้อมูลเกี่ยวกับการซื้อสินค้าในร้านค้าของลูกค้า อย่างไรก็ตามเขาไม่ได้ทำงานที่ยอดเยี่ยมและเจ้านายของคุณบอกให้คุณแก้ไขด้านลูกค้าแทน เป็นการดีที่คุณควรจะได้รับค่าคั่นด้วยเครื่องหมายจุลภาคเช่น927,2,45,90ซึ่งสอดคล้องกับสิ่งที่ชอบitem_id, item_amount, unit_price,total

ในจิ๊กซอว์แรกนี้เราสนใจ แต่เพียงอย่างเดียวitem_idและitem_amountเราต้องการฟิลด์อื่น ๆ เพื่อแสดงปัญหา แบร์รี่บางครั้งได้รับสิ่งที่ผสมขึ้นและผลตอบแทนเสียงเป็นส่วนหนึ่งของการส่งออกนอกจากนี้เขายังได้รับการสั่งซื้อที่ไม่ถูกต้องกลับnoise, noise, unit_price, total, ,item_iditem_amount

งานของคุณ

คุณจำเป็นต้องจัดเก็บในแผนที่ (หรือโครงสร้างที่คล้ายกัน) คู่item_idและitem_amountไม่คำนึงว่า Barry ส่งคืนถูกต้องหรือไม่และพิมพ์แต่ละองค์ประกอบในบรรทัดใหม่ด้วยจำนวนอักขระน้อยที่สุดเท่าที่จะทำได้ (การจัดเก็บไม่ได้บังคับเราเพียงแค่สนใจเกี่ยวกับผลลัพธ์)

ตัวอย่างอินพุต (รูปแบบผสมที่ถูกต้องและยุ่ง)

103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000

ในคำอื่น ๆ การป้อนข้อมูลจะเป็นอย่างใดอย่างหนึ่งa,b,x,xหรือx,x,x,x,a,bที่สิ่งที่เราดูแลเกี่ยวกับงานa bคุณต้องระบุรหัสโดยสมมติว่าเรามีตัวแปรที่เรียกว่าG(หรือชื่ออื่น ๆ ) พร้อมทุกบรรทัดของ csv

ตัวอย่างผลลัพธ์

103,2
106,1
67,2 //This one was messy
4,20

ความอดทน

มีระยะเผื่อไว้สำหรับคำตอบ คำตอบในรูปแบบที่คล้ายกัน แต่จะปฏิบัติตามค่าที่ถูกต้องก็จะได้รับการยอมรับเช่นกัน รูปแบบเช่น[a,b], (a,b)หรือ{a,b}ถูกต้อง แต่a,bเป็นที่ต้องการ

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


การป้อนข้อมูลจะถูกเสมอของรูปแบบx,x,x,xและx,x,x,x,x,xที่xหมายถึงจำนวนหรือไม่?
Spikatrix

ใช่ข้อมูลจะเป็นไปตามรูปแบบใดรูปแบบหนึ่งจากนั้นให้ฉันอธิบาย
Juan Cortés

เราจำเป็นต้องส่งโปรแกรมหรือฟังก์ชั่นหรืออย่างอื่นหรือไม่? นอกจากนี้สามารถนำอินพุตทั้งหมดมาจากไหน
Spikatrix

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

2
@CoolGuy ไม่มีสิ่งนั้น คุณไม่ควรเอาชนะ Pyth ด้วย C (เพราะคุณไม่เคยไป) ความปิติยินดีในการเอาชนะการส่งอื่น ๆ ในภาษาเดียวกันหรือภาษาที่มีคำฟุ่มเฟื่อยที่คล้ายกัน หากมีการส่งแบบ 50 ไบต์ C อยู่แล้วฉันสามารถเข้าใจว่าไม่ได้โพสต์ (แม้ว่าถึงตอนนั้นฉันอาจโพสต์ได้หากวิธีการนั้นแตกต่างและน่าสนใจ) แต่เนื่องจากไม่มีโปรดโพสต์คำตอบของคุณ คุณค่อนข้างใกล้กับ JavaScript และ Python ดังนั้นจึงไม่ยาวเกินไปสำหรับ C
Martin Ender

คำตอบ:


8

Pyth, 10 ไบต์

FNG<.<N4 2

ลองใช้งานออนไลน์: Pyth Compiler / Executor

(4 chars แรก=G.Qอ่านข้อมูลทั้งหมดและเก็บไว้ในG)

คำอธิบาย

FNG              for row N in G:
    .<N4            cyclic leftshift by 4
   <     2          print the first two elements

4
สวยงามฉันเริ่มชอบ Pyth แล้ว
Juan Cortés

3
@ JuanCortés: นี่อาจเป็นแหล่งข้อมูลที่ดีหากคุณต้องการเริ่มต้นกับ Pyth
Alex A.

7

Perl, 24

perl -pe's/(\d+,){4}|,\d+,\d+$//'

ตัวอย่าง:

perl -pe's/(\d+,){4}|,\d+,\d+$//' <in
103,2
106,1
67,2
4,20

1
นี้จะเป็น 20 ไบต์ในจอประสาทตา ;)
Martin Ender

7

Python 3 123 76 72 62 ไบต์

ฉันเป็นผู้มาใหม่ต้องเริ่มต้นที่ไหนซักแห่ง ...

 for l in G:
  d=l.rstrip().split(',');x=[0,4][len(d)>5];print(d[x:x+2])

ด้วยคำแนะนำของ xnor และ DLosc (62 bytes):

for l in G:d=l.rstrip().split(',');print(d[4*(len(d)>5):][:2])

8
ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนาและรหัสกอล์ฟ! เนื่องจากนี่เป็นการแข่งขันกอล์ฟรหัสคุณจะต้องทำให้รหัสของคุณสั้นที่สุด สิ่งหนึ่งที่คุณสามารถทำได้คือลดจำนวนพื้นที่ที่ใช้สำหรับการเยื้อง ช่องว่างเพียงช่องเดียวใน Python โพสต์นี้แสดงเคล็ดลับสำหรับการเล่นกอล์ฟใน Python และอาจเป็นข้อมูลอ้างอิงที่ดี
Alex A.

@ อเล็กซ์ขอบคุณ - ฉันพยายามคิดออกกฎที่แน่นอนฉันหวังว่าฉันสามารถละเว้นช่องว่างบางอย่าง แต่ฉันเดาไม่
Monguin

ไม่ขึ้นบรรทัดใหม่และเว้นวรรคทั้งปัจจัยในการนับตัวละครของคุณ
Alex A.

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

3
เป็นการเริ่มต้นที่ดี คุณสามารถใส่ทุกอย่างในบรรทัดเดียวกับforเพื่อหลีกเลี่ยงการเยื้อง เงื่อนไข[0,4][...] สามารถสั้นลงได้ 4*(...)โดยใช้ความจริงที่ว่า bools เท่ากับ 0/1 นอกจากนี้หากคุณเขียนd[x:x+2]เป็นd[x:][:2]แม้ว่าตัวละครอีกตัวจะช่วยให้คุณหลีกเลี่ยงการบันทึกนิพจน์สำหรับxตัวแปร
xnor

4

Sed, 32 ไบต์

s/,/=/4
s/.*=//
s/,/:/2
s/:.*//

สิ่งนี้จะลบทุกอย่างจนถึงเครื่องหมายจุลภาคที่ 4 หากมี จากนั้นจะลบทุกอย่างจากเครื่องหมายจุลภาคที่ 2 (ซึ่งอาจเคยเป็นอันดับที่ 6)

และฉันก็จัดการให้ถูกต้องด้วยความชอบธรรม!


มีโอกาสเห็นตัวอย่างไหม?
Juan Cortés

ฉันไม่แน่ใจว่าสิ่งที่คุณต้องการจากการสาธิต - ฉันวิ่งทดสอบการป้อนข้อมูลของคุณและได้รับผลลัพธ์ที่ต้องการ
Toby Speight

4

Javascript, 44 ไบต์

Gสมมติว่าการป้อนข้อมูลในตัวแปร

แก้ไข: ฉันเพิ่งรู้ว่ามันดูเหมือนโซลูชัน perl ของ nutki

alert(G.replace(/(\d+,){4}|,\d+,\d+$/gm,''))

ตัวอย่างการสาธิต:

function run(){
    G = input.value;
    /* start solution */
    alert(G.replace(/(\d+,){4}|,\d+,\d+$/gm,''))
    /* end solution */
}
<textarea id="input" cols="25" rows="6">103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000</textarea><br />
<button id="run" onclick="run();">Run</button>


4

สกาลา, 68 ไบต์

G.map(_.split(",")).map(x=>println((x++x).slice(4,6).mkString(",")))

- MrBones

สกาลา46 70 ไบต์

แก้ไข: พิมพ์ผลลัพธ์

for{l<-G;r=l.split(",");x=(r++r).slice(4,6).mkString(",")}{println(x)}

การสาธิต


1
น้อยกว่า 1 ไบต์โดยใช้แผนที่แทนG.map{k=>val x=k.split(",");println((x++x).slice(4,6).mkString(","))}
Squidly

1
อีกหนึ่งไบต์ที่บันทึกไว้โดยปล่อยการเชื่อมโยง:G.map(_.split(",")).map(x=>println((x++x).slice(4,6).mkString(",")))
Squidly

3

CJam, 18 15 14 ไบต์

r{',/4m<2<pr}h

ลองใช้ออนไลน์ในล่าม CJamล่าม

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

r      e# Read a whitespace separated token from STDIN.
{      e# Do-while loop:
  ',/  e#    Split at commas.
  4m<  e#    Rotate the resulting array 4 units to the left.
  2<   e#    Discard everything but the first 2 elements.
  p    e#    Print the array.
  r    e#    Read a whitespace separated token from STDIN.
}h     e# If the token is a nonempty string, repeat the loop.

3

POSIX เชลล์ขนาด 30 ไบต์

สมมติว่า POSIX sedและcutเป็นปัจจุบัน:

sed 's/.*/&,&/'|cut -d, -f5,6

ทำซ้ำบรรทัดโดยปล่อยให้ข้อมูลที่น่าสนใจพร้อมที่จะถูกแยกออกจากฟิลด์ 5 และ 6


3

Javascript, 117 112 99 95 84 76 71 ไบต์

for(r of G.split('\n'))s=r.split(','),console.log(s[t=s[4]?4:0],s[t+1])

JS Fiddle


1
กรุณาโพสต์ซอหรือการสาธิต
Juan Cortés

คุณสามารถลบสอง b โดยแทนที่;ด้วย,ในห่วงร่างกายและดังนั้นจึงลบวงเล็บ{และ}
Juan Cortés

@ JuanCortés - ขอบคุณไม่รู้ด้วยซ้ำ ทฤษฎีที่อยู่เบื้องหลังนั้นคืออะไร?
RichieAHB

หากไม่มีการจัดฟันวงเล็บของห่วงจะเป็นนิพจน์แรกหลังจากวงเล็บปิด นิพจน์ลงท้ายด้วยเซมิโคลอน การแยกนิพจน์ด้วยเครื่องหมายจุลภาคทำให้พวกเขาเป็นเหมือนกลุ่มนิพจน์หากคุณสามารถยุติการแสดงออกหลังพวกเขาได้
Juan Cortés

1
การใช้for ofคุณสามารถบันทึกได้ 3 ไบต์ มันทำงานได้ในเบราว์เซอร์ที่ทันสมัย for(r of q=G.split('\n'))s=r.split(','),console.log(s[t=s[4]?4:0],s[t+1])
edc65

2

Pip , 12 + 1 = 13 ไบต์

ใช้-lแฟล็กซึ่งให้เอาต์พุตเป็นรายการตัวเลขคั่นด้วยช่องว่างในแต่ละบรรทัด *

_@[4 5]Mg^',

คำอธิบาย:

  • gรายการของตัวเลขคาดว่าใน ตั้งแต่gปกติจะเริ่มต้นได้จากอาร์กิวเมนต์บรรทัดคำสั่งคุณยังสามารถใส่อินพุตที่นั่นสำหรับผลลัพธ์เดียวกัน
  • ^', แยก (แต่ละสตริงเข้า) รายการในคอมมา
  • M แมปฟังก์ชันกับแต่ละองค์ประกอบในผลลัพธ์
  • _@[4 5]กำหนดฟังก์ชั่นแลมบ์ดา อาร์กิวเมนต์ฟังก์ชั่นที่เป็นตัวแทนจาก_; @[4 5]ส่งคืนรายการองค์ประกอบที่ 4 และ 5 หากรายการมีองค์ประกอบหกรายการสิ่งเหล่านี้จะเป็นสององค์ประกอบสุดท้าย หากมีสี่ดัชนีจะถูกล้อมรอบและผลลัพธ์ก็คือสองดัชนีแรก (เช่น"abcd"@4 == "abcd"@0 == "a".)
  • ตอนนี้เรามีรายการของรายการเช่น[[103 2] [106 1] [67 2]]ที่พิมพ์อัตโนมัติเมื่อสิ้นสุดโปรแกรม -lธงร่วมย่อยแต่ละรายการในพื้นที่และแล้วสิ่งที่ทั้งในการขึ้นบรรทัดใหม่ดังนั้นผลที่ได้จะเป็นดังนี้:
C: \> pip.py -le "_ @ [4 5] Mg ^ '," 103,2,50,100 106,1,900,900 459,40,150,300,67,2 106,2,50,100
103 2
106 1
67 2

* ปัจจุบัน ฉันอาจเปลี่ยนพฤติกรรมนี้ แต่ฉันยังวางแผนที่จะมีการตั้งค่าสถานะบางอย่างที่ทำสิ่งเดียวกัน


1

Perl, 37

@c=/(\d+,\d+)/g;$_=@c>2?$c[2]:$c[0]

35ตัวอักษร+2สำหรับและ-p -lฉันไม่แน่ใจว่ามีวิธีการใน Perl ที่จะเอาชนะโซลูชันของ @ nutkiหรือไม่ แต่ฉันคิดว่าฉันจะโพสต์ความคิดที่ฉันมีอยู่แล้ว

ทำงานด้วย:

cat input.txt | perl -ple'@c=/(\d+,\d+)/g;$_=@c>2?$c[2]:$c[0]'


0

C, 95 ไบต์

f(a,b,c,d){scanf("%d,%d,%*d,%*d,%d,%d",&a,&b,&c,&d)>2?printf("%d,%d",c,d):printf("%d,%d",a,b);}

รหัสนั้นง่าย นี่คือรุ่นที่ไม่ได้แต่งแต้ม:

f(a,b,c,d){                                    //Four int variables
    scanf("%d,%d,%*d,%*d,%d,%d",&a,&b,&c,&d)>2 //Scan input
        ?                                      //If scanf returned a value > 2
        printf("%d,%d",c,d)                    //Print last two values
        :                                      //else 
        printf("%d,%d",a,b);                   //Print first two values
}

ทดสอบที่นี่


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