แปลก ๆ


30

รับสายอักขระที่xส่งออกในการxเรียงลำดับตามลำดับของลักษณะที่ปรากฏในซอร์สโค้ดของคุณ

ตัวอย่าง

Source: ThisIs A Test
 Input: Is it a Test?
Output: TissI   etta?

Source: Harry - yer a wizard.
 Input: I'm a what?
Output: aa  wh'?Imt

Source: Mr. H. Potter, The Floor, Hut-on-the-Rock, The Sea
 Input: 
Output:

กฎระเบียบ

  • มีช่องโหว่มาตรฐาน & กฎ i / o
  • อินพุตและเอาต์พุตสามารถเป็นสตริงรายการอักขระหรือรายการไบต์
  • หากมีการใช้อักขระหลายครั้งในซอร์สให้ใช้เหตุการณ์แรก
  • หากอักขระอย่างน้อยหนึ่งตัวไม่ปรากฏในแหล่งที่มาอักขระนั้นควรอยู่ท้าย คำสั่งของพวกเขาไม่สำคัญและไม่ต้องสอดคล้องกัน
  • แหล่งที่มาจะต้องไม่ว่างเปล่า
  • ขึ้นบรรทัดใหม่จะถือว่าเหมือนกับตัวละครอื่น ๆ
  • ลำดับที่ใช้รหัสนั้นไม่สำคัญ เพียงแค่สตริงดิบ
  • อินพุตอยู่ในการเข้ารหัสเช่นเดียวกับรหัส
  • อินพุตถูกจัดเรียงตามอักขระไม่ใช่ไบต์
  • การเรียงลำดับจะคำนึงถึงขนาดตัวพิมพ์
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์สำหรับแต่ละภาษาที่ชนะ!


2
@negativeseven ต้องใช้อักขระใด ๆ จากการเข้ารหัสซอร์สโค้ดรวมถึงช่องว่าง
tjjfvi


3
คุณอาจจะต้องพูดถึงอย่างชัดเจนในข้อมูลจำเพาะว่าการจับคู่เป็นตัวพิมพ์เล็กหรือใหญ่
Shaggy

1
เราสามารถxเข้ารหัสใน UTF-8 หรือ UTF-16 ได้หรือไม่หากโซลูชันของเราไม่ได้เข้ารหัสใน Unicode เลยและอักขระ Unicode xแทนตัวอักษรในหน้ารหัสของโซลูชัน ตัวอย่างเช่นภาษากอล์ฟบางภาษาใช้หน้ารหัสที่กำหนดเองเพื่อลดจำนวนไบต์ แต่ยังสามารถอ่านได้ด้วยตาเปล่า
Erik the Outgolfer

1
@tjjfvi ฉันไม่ได้พูดถึง no-ops ที่นี่ (ซึ่งจะไม่ถูกต้องแน่นอน); อย่างน้อยสองสามคำตอบด้านล่างแทนการป้อนข้อมูลในไบต์ธรรมดา (0x00-0xFF) รับอินพุตเป็นสตริง UTF-8 ที่ลำดับไบต์จะเป็นตัวแทน (เช่นเมื่อเราโพสต์คำตอบเรามักจะโพสต์ UTF -8 รุ่นของรหัสของเราไม่ใช่ hexdump) จากนั้นใช้การแทน UTF-8 ของซอร์สโค้ดเพื่อเรียงลำดับอินพุต สิ่งนี้ได้รับอนุญาตหรือไม่? ฉันรู้สึกว่ามันควรจะเป็นตัวเลือกเช่นกัน (ข้างลำธาร byte) เพราะมิฉะนั้นการแก้ปัญหาในการเล่นกอล์ฟภาษาที่มีรหัสเพจที่กำหนดเองจะถูกขัดขวางอย่างมาก
Erik the Outgolfer

คำตอบ:


13

Python 3.8 (เผยแพร่ล่วงหน้า) , 102 100 96 85 79 76 68 61 59 60 ไบต์

c="print(sorted(x:=input(),key=('c=%r;'%c+x).find))";exec(c)

ลองออนไลน์!

-2 ไบต์โดยใช้ สิ่งนี้

-4 ไบต์โดยตระหนักว่า<0====-1และลบสิ่งที่ไม่จำเป็นออก+1

-11 ไบต์ขอบคุณ Neil

-6 ไบต์ขอบคุณ dzaima

-3 ไบต์ต้องขอบคุณก้าน

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

-7 ไบต์เนื่องจากศูนย์รวมของการไม่รู้การสลับกลับไปเป็น Python 3.8 และการใช้ :=

-2 ไบต์เนื่องจาก Jo King เปลี่ยนชื่อตัวแปรสำหรับ c ดังนั้นเราจึงไม่สามารถออก ;c

+1 ไบต์เนื่องจากลบเจ็ดชี้ให้เห็นว่าการกรองไม่;ถูกต้อง


('s=%r;exec(s)'%s+x).find(x)?
Neil

@Neil โซลูชันปัจจุบันไม่ถูกต้องและการแทนที่('s=%r;exec(s)'%s).find(x)ด้วยรหัสของคุณจะทำให้ถูกต้องหรือไม่
MilkyWay90

@ Neil โอ้รอฉันเห็นกอล์ฟของคุณ
MilkyWay90

คุณสามารถสลับไปที่input()และบันทึก4 ไบต์
Rod

4
;ไม่ได้ถูกจัดเรียงอย่างถูกต้องในเวอร์ชันปัจจุบัน
ลบเจ็ด

7

APL (Dyalog Unicode) , 14 ไบต์SBCS

ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ

'''∘⍋⊃¨⊂'∘⍋⊃¨⊂

 ปิดอาร์กิวเมนต์ (เพื่อดำเนินการโดยรวม)

⊃¨ จากนั้นเลือกตัวละครหนึ่งตัวสำหรับแต่ละดัชนีดังต่อไปนี้:

∘⍋ ดัชนีที่จะเรียงลำดับอาร์กิวเมนต์ตามลำดับที่กำหนดโดยสตริงต่อไปนี้ (สมาชิกที่ไม่ใช่สมาชิกทั้งหมดจะเรียงตามลำดับที่ปรากฏ)

'''∘⍋⊃¨⊂' ตัวละคร '∘⍋⊃¨⊂

ลองออนไลน์!



5

JavaScript (Node.js) , 60 58 56 ไบต์

-2 bytes จาก Jo King

f=_=>_.sort((a,b)=>(p=g=>`f=${f+g}`.indexOf(g))(a)-p(b))

ลองออนไลน์!


f=...รหัสของคุณดูเหมือนว่าจะทำงานเฉพาะเมื่อมาเป็น หากเป็นกรณีนี้โปรดระบุไว้ในจำนวนการส่ง & ไบต์ของคุณ
tjjfvi


3

Ruby , 57 ไบต์

->s{s.sort_by{|o|%{->s{.ort_by|%}index()9}.index(o)||99}}

ลองออนไลน์!

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


3

05AB1E , 24 22 21 ไบต์

Σ"Σ"'"«"'«Rrk}"«Rrk}R

ลองออนไลน์!

คำอธิบาย:

Σ                    }               # Sort
 "Σ"                                 # Σ string literal
    '"                               # " string literal
       «                             # Concatenate last two literals
        "'«Rrk}"                     # '«Rrk} another literal
                «                    # Concat again
                 R                   # Reverse literal (so: }krR'«'"Σ)
                  r                  # reverse stack 
                   k                 # find the current sorting index in our code string 
                     R               # reverse our sorted string

ครั้งแรกที่ทดลองใช้สิ่งต่างๆใน 05AB1E อาจมีการบันทึกจำนวนมาก


คุณแน่ใจหรือไม่ว่าถูกต้อง? }krR«'«สตริงตอนนี้เรียงลำดับบนมี หมายเหตุ: 'เป็นตัวละครตัวเดียวดังนั้นก็'"พอแล้ว (ต่างจาก C # ตรงที่มันต้องการการต่อท้ายเพิ่มเติม') ในปัจจุบันรหัสของคุณกดสตริงΣจากนั้นสตริง"จากนั้นสตริง«จากนั้นสตริง'«Rrk}และจากนั้นจะผนวก, ย้อนกลับ, ย้อนกลับสแต็ก, ดัชนี การใช้งานอย่างชาญฉลาดของการย้อนกลับของสตริงและในตอนท้ายแม้ว่า! ฉันจะดูว่าฉันสามารถหาวิธีแก้ไขสำหรับคำตอบของคุณและจะลบของฉันในภายหลัง
Kevin Cruijssen

@kevincruijssen ฉันไม่สามารถกำจัดสิ่งที่สองได้ '
ข้อมูลหมดอายุ

1
ใช่คุณสามารถทำได้อย่างแน่นอน :) }krR«'"Σจากนั้นก็จะถูกต้องเรียงลำดับบน PS: ฉันมักจะใช้=(พิมพ์โดยไม่ต้อง popping) เพื่อวัตถุประสงค์ในการแก้ปัญหาในบางครั้ง คุณยังสามารถเพิ่ม--debug-stackเป็นอาร์กิวเมนต์ได้ แต่มันแปลกเล็กน้อยในรุ่น 05AB1E ใหม่ imho
Kevin Cruijssen

3

เยลลี่ , 16 14 ไบต์ (หน้ารหัสวุ้น), 25 ไบต์ (UTF8)

“Ṿv`Ṿ;³³i@Þ”v`

ลองออนไลน์!

โปรแกรมเต็มรูปแบบที่รับอาร์กิวเมนต์เดี่ยวสตริงที่จะเรียงลำดับ

ขอบคุณ @JonathanAllan ที่ชี้ให้เห็นข้อผิดพลาด!

ตาม @EriktheOutgolfer ถึงแม้ว่ารหัสสามารถใส่ได้โดยใช้หน้ารหัส Jelly แต่ตัวละครที่เรียงลำดับนั้นเป็น UTF-8 ที่เทียบเท่ากันแทนที่จะเป็นไบต์ของแหล่งที่มา ด้วยเหตุนี้ฉันจึงรวมคะแนนเป็น UTF-8 ด้วย โปรดทราบว่าอาจใช้กับทุกภาษาที่มีหน้ารหัสที่กำหนดเอง

คำอธิบาย

“Ṿv`Ṿ;³³i@Þ”   | The string "Ṿv`Ṿ;³³i@Þ", referred to below as S
            v` | Evaluate this string as Jelly code using the string itself as the argument

สตริงด้านบนประเมินว่า:

Ṿ          | Uneval the string S (effectively wraps it in “”)
 v`        | Eval it (effectively removes the “”)
   Ṿ       | Uneval it again, adding back in the “”
    ;³     | Concatenate the input to this
      ³i@Þ | Sort the input with respect to the first occurence of each character in the “”-wrapped string S concatenated to the input

Ṿv` ไม่มีตัวเลือกอย่างมีประสิทธิภาพที่นี่ แต่มีอยู่เพื่อให้แน่ใจว่ามีการแสดงอักขระทั้งหมด


ดังนั้น ... ฉันโพสต์คำตอบ Jelly ของฉันแล้วคลิกที่ฉัน: ล่ามแปลง bytecode เป็น UTF-8 ก่อนที่จะดำเนินการดังนั้น bytecount ควรจะเพิ่มขึ้นหรือรหัสจะเปลี่ยนให้พอดีกับเพจรหัส
Erik the Outgolfer

@EriktheOutgolfer ฉันไม่เข้าใจสิ่งที่คุณได้รับที่นี่ สิ่งนี้แตกต่างจากการท้าทาย codegolf อื่น ๆ ในเรื่องนี้อย่างไร
Nick Kennedy

ลักษณะการอ้างอิงตนเองแตกต่างกันดังนั้นในความเป็นจริงแล้วรหัสจะเรียงตัวอักษร UTF-8 ไม่ใช่ไบต์ที่ควรจะเป็น
Erik the Outgolfer

3

เยลลี่ขนาด 14 ไบต์

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ

โปรแกรมเต็มรูปแบบยอมรับสตริง (จัดรูปแบบ Python) (ของตัวอักษรหน้าโค้ด Jelly ) ซึ่งพิมพ์ผลลัพธ์
(เป็นลิงค์ monadic มันทำให้รายการของรายการของตัวละคร)

ลองออนไลน์!

อย่างไร?

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ - Main Link: list of characters, S
“;fɓḟṾⱮ”       - list of characters = [';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ']
        Ṿ      - un-evaluate = ['“', ';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ', '”']
         ɓ     - start a new dyadic chain, F(S, T=that):
           Ɱ   - for each character, t, in T:
          f    -   (S) filter keep any of (the single character, t)
             ḟ - (S) filter discard any of (the characters in T)
            ;  - concatenate

ดังนั้น ... ฉันโพสต์คำตอบ Jelly ของฉันแล้วคลิกที่ฉัน: ล่ามแปลง bytecode เป็น UTF-8 ก่อนที่จะดำเนินการดังนั้น bytecount ควรจะเพิ่มขึ้นหรือรหัสจะเปลี่ยนให้พอดีกับเพจรหัส
Erik the Outgolfer

@EriktheOutgolfer ฉันคิดว่าอันนี้ปลอดภัยในส่วนนั้นเนื่องจากวิธีนี้ไม่มีการเรียงลำดับใด ๆ และตรงตาม I / O ที่อยู่ในเกณฑ์การเข้ารหัสเดียวกัน (หน้ารหัสของ Jelly)
Jonathan Allan

เอ๊ะ ... ฉันคิดว่าfและทำงานกับตัวละคร Unicode เพราะนั่นเป็นตัวละครประเภทไหนที่มีอยู่ในสตริง ตัวอย่างเช่น”ĿOผลตอบแทน319ถ้าทดสอบในท้องถิ่นเข้ารหัสในเยลลี่ดังนั้นมันจะเห็นĿและไม่ใช่ C7
Erik the Outgolfer

ฉันคิดfและทำงานกับ Unicode ด้วย แต่นั่นเป็นปัญหาหรือเปล่า ฉันผ่านชุดอักขระ Unicode ที่ จำกัด ซึ่งปรากฏบนหน้ารหัสของ Jelly (นั่นคือไบต์ที่เข้ารหัสโดยใช้การเข้ารหัสนั้นตอบสนอง "อินพุตอยู่ในการเข้ารหัสเดียวกันกับรหัส"); กรองอย่างถูกต้อง (เนื่องจากไบต์ที่ป้อนเข้าเหล่านี้ถูกเข้ารหัสเป็น Unicode) แล้วส่งออกอย่างถูกต้อง สิ่งที่ฉันนับคือไบต์ของโค้ด (การตอบสนอง "อินพุตถูกเรียงตามอักขระไม่ใช่ไบต์" และ "คำตอบสั้นที่สุดเป็นไบต์สำหรับแต่ละภาษาที่ชนะ")
Jonathan Allan

1
@JanathanAllan ฉันรู้สึกว่า "ได้รับการเข้ารหัสอักขระบางตัวโดยใช้หน้ารหัสของ Jelly" เป็นสิ่งที่ฉันอ้างถึงในความคิดเห็นก่อนหน้าของฉัน เนื่องจากการเข้ารหัสของรหัสประกอบด้วยไบต์เดียวตั้งแต่ 0x00 ถึง 0xFF นั่นคือสิ่งที่การเข้ารหัสของอาร์กิวเมนต์ควรประกอบด้วยเช่นกันแทนอาร์กิวเมนต์จะถูกส่งหลังจากการแมปจาก JELLY ถึง UTF-8 ดังนั้นอักขระแต่ละตัวจึงไม่จำเป็นต้องเป็นแบบเดี่ยว ไบต์อีกต่อไป โดยพื้นฐานแล้วโค้ดอยู่ใน JELLY ในขณะที่อาร์กิวเมนต์อยู่ใน UTF-8 แม้ว่าจะได้รับการแมปกับ JELLY ก็ตาม ในขณะที่เอาท์พุท UTF-8 ที่ถูกต้องกลับมามันควรจะเป็น JELLY มาตลอด
Erik the Outgolfer

2

ถ่าน , 37 ไบต์

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№ηFηΦθ⁼ικΦθ¬№ηι

ลองออนไลน์! คำอธิบาย:

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№η

มีสองวิธีในการอ้างอิงอักขระใน Charcoal; ´อัญประกาศอักขระเดี่ยวใด ๆ ในขณะที่”y... อัญประกาศอักขระใด ๆ ยกเว้นและยังนับเป็นสตริงแยกต่างหาก ปรากฎว่าค่าโสหุ้ยในการจัดการกับวิธีการที่จะไม่ท้ายนักกอล์ฟใด ๆ

FηΦθ⁼ικ

วนรอบตัวอักขระในทางกลับกันออกอักขระใด ๆ ที่ตรงกันจากอินพุต นี่เป็นการเรียงลำดับอินพุต

Φθ¬№ηι

เอาต์พุตอักขระที่ไม่ตรงกันใด ๆ ในอินพุต


2

J , 14 ไบต์

ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ

]/:']/:''i'i:]

ลองออนไลน์!

] อาร์กิวเมนต์

... i: การเกิดขึ้นครั้งสุดท้าย (ที่ไม่ใช่สมาชิกจะได้รับดัชนีนอกเหนือจากจุดสิ้นสุดของการค้นหาสตริง) ของตัวละครแต่ละตัวใน:

']/:''i' ตัวละคร ]/:'i

... /: ใช้สิ่งนั้นเพื่อจัดเรียง:

] อาร์กิวเมนต์


ช่องว่างนำทั้งสี่เป็นผลมาจากเสียงสะท้อนหรือรหัสหรือไม่
tjjfvi

1
@tjjfvi เป็นวิธีการกำหนดค่า TIO แก้ไขแล้ว
อดัม

2

Java 10, 129 100 ไบต์

s->{s.sort(java.util.Comparator.comparing(c->("s->{.ort(javuilCmpcng\"\\+)dexOf;}"+c).indexOf(c)));}

-29 ไบต์โดยย้ายระบบ+cจาก@EmbodimentOfIgnorance 's C # คำตอบ

ลองออนไลน์

คำอธิบาย:

s->{                 // Method with char-List parameter and no return-type
  s.sort(java.util.Comparator.comparing(c->
    ("s->{.ort(javuilCmpcng\"\\+)dexOf;}"
                     //  Push a String containing the characters in the code
     +c)             //  Append the current character
        .indexOf(c)  //  And get the first index of the current character in the String

หมายเหตุ: โดยปกติแล้วราคาถูกกว่าการใช้งานs.sort((a,b)->Long.compare(a,b))แทนs.sort(java.util.Comparator.comparing(c->c)แต่ในกรณีนี้จะมีความยาว 11 ไบต์:

s->{var v="s->{var =\"\\;.ot(,)Lngcmpe+idxOf}";s.sort((a,r)->Long.compare((v+a).indexOf(a),(v+r).indexOf(r)));}

ลองออนไลน์


2

05AB1E , 31 26 19 ไบต์

Σ'"'ÿs"Σ'ÿÿsìyk"ìyk

-7 ไบต์โดยใช้แรงบันดาลใจของวิธีการของ@ EmbodimentOfIgnorance ในคำตอบ C #ของเขาต่อท้ายอักขระปัจจุบันก่อนทำดัชนี

ลองมันออนไลน์หรือลองกับเพิ่มการแก้ปัญหาเส้นเพื่อดูสตริงที่ถูกจัดทำดัชนีลงไป

คำอธิบาย:

Σ                 # Sort the (implicit) input-string by:
 '"              '#  Push string '"'
   'ÿ            '#  Push string "ÿ"
     s            #  Swap the order of these two strings on the stack
      "Σ'ÿÿsìyk"  #  Push string "Σ'ÿÿsìyk", where the `ÿ` are automatically filled with
                  #  the previous strings we created: `Σ'"ÿsìyk`
                  #  (top to bottom from stack; left to right in string)
       ì          #  Prepend this string in front of the character we're sorting
        yk        #  And then get the index of the character we're sorting in this string
                  # (after the sorting the resulting string is output implicitly)

ดูเหมือนว่าจะมีการพิมพ์ผิดในคำอธิบาย ("y" แทน "s")
ArBo

@ArBo คงที่ขอบคุณ
Kevin Cruijssen

1
พูดอย่างเคร่งครัดฉันมีแรงบันดาลใจมากกว่า 12 ชั่วโมงก่อนหน้านี้เมื่อฉันเล่นกอล์ฟ 11 ไบต์ของคำตอบของ @ MilkyWay90 ...
Neil

ดีจัง! ฉันเห็นสิ่งนั้น แต่ไม่เห็นวิธีที่จะแปลงเป็นสิ่งนี้ในขณะที่บันทึกไบต์
ข้อมูลหมดอายุ

2

PowerShell , 68 ไบต์

$p=$args
&($t={$p|sort-object{"`$p=`$args
&(`$t={$t})$_"|% i*f $_}})

ลองออนไลน์!


2
1) ทำงานsortแทนsort-objectเช่นกัน 2) ตัวแปรที่$bกำหนดไว้ไม่อยู่ในขอบเขตรหัสของคุณ Standard loopholesต้องมีคำตอบที่สมบูรณ์ สำหรับ Powershell หมายความว่า: บุคคลใด ๆ สามารถใช้รหัสในไฟล์เป็นสคริปต์ PowerShell และเรียกใช้ในเทอร์มินัล รหัสของคุณใช้ไม่ได้กับไฟล์สคริปต์ ขอโทษ
mazzy

1
@ mazzy ขอบคุณมาก 1) sortนามแฝงไม่ทำงานใน pwsh บน Ubuntu 18.04 2) ใช่นี้เป็นความผิดของฉัน แต่ฉันแก้ไขตัวเองและเป็นผลให้รหัสกลายเป็นอีกต่อไปแน่นอน :)
อังเดร Odegov

(oO)! I've created sort alias for Powershell. code became longer - this is the challenge :)
mazzy

1
Yes, you are right. Each individual character of $p is append to the end of the string with the source code and gets an index equal to $src.Length, but since “their order does not matter and should not be consistent,” it is not matter. In this answer, the entire input string is appended to the end of the string with the source code.
Andrei Odegov

1
@dfeuer, I don't understand your question. Sorry.
mazzy


2

Japt, 18 bytes

ñÈi"ñÈi\"\\ bX" bX

Try it

ñÈi"ñÈi\"\\ bX" bX     :Implicit input of string or character array
ñ                      :Sort by
 È                     :Passing each X through the following function
  i                    :  Prepend X with
   "ñÈi\"\\ bX"        :    Literal string (The \s are annoying me!)
                bX     :  First index of X

1

Jelly, 26 bytes (UTF-8*)

“®³nÞṾ©V”Ṿ©VV

Try it online!

Takes input as a Python-formatted string in the 1st command-line argument.

ตัวละครที่ไม่ซ้ำกัน :

“®³nÞṾ©V”

* หมายเหตุ: ฉันค้นพบว่าวิธีนี้ใช้ไม่ได้เมื่อเข้ารหัสใน JELLY เนื่องจากมันเรียงลำดับอักขระ UTF-8 แทนไบต์ของตัวเอง

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