เซ็นคำว่า!


12

ลายเซ็น Word คืออะไร

ลายเซ็นของคำที่มีทั้งหมดของตัวอักษรมันใส่ในการสั่งซื้อ - ลายเซ็นของthis, histและที่มีอยู่ทั้งหมดhitshist

ความท้าทาย

เขียนโปรแกรมโปรแกรมควรถามอินพุตจากนั้นพิมพ์ลายเซ็นของคำนั้น ดังนั้นการรันโปรแกรมตัวอย่างอาจมีลักษณะเช่นนี้:

Give me a string: this
The signature signature of 'this' is hist.

ไม่มีการโต้ตอบที่จำเป็นตราบใดที่รับอินพุตและพิมพ์ลายเซ็นก็ถือว่าใช้ได้

เกณฑ์การให้คะแนน

โปรแกรมที่มีจำนวนไบต์น้อยที่สุดชนะ!

ลีดเดอร์บอร์ด

นี่เป็นตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวได้ ตัวอย่างเช่น

# Ruby, <s>104</s> <s>101</s> 96 bytes

ท้าทายแล้ว!

ผู้ชนะ: jimmy23013


3
เราไม่จำเป็นต้องพิมพ์ประโยคGive me a string:และThe signature signature of 'this' isใช่ไหม? เราสามารถรับอินพุตโดยตรงและพิมพ์ผลลัพธ์ได้หรือไม่
ลดขนาด

4
แล้วตัวอักษรที่ซ้ำกันล่ะ? เช่นลายเซ็นของbroom bmoorหรือbmor?
samgak

3
@isaacg ทำไมคุณเป็นอย่างไร
ทิม

3
@ เวลาฉันไม่คิดว่าเราควรมีความท้าทายที่ตรงไปตรงมานี้ ฉันจะถามเกี่ยวกับมันในเมตาดาต้า - มันไม่เกี่ยวกับคำถามนี้โดยเฉพาะ
isaacg

2
ฉันคิดว่านี่น่าจะเป็นความท้าทายที่น่าสนใจกว่าถ้าคุณไม่สามารถใช้ฟังก์ชั่นการเรียงลำดับในตัวได้
เกลน O

คำตอบ:


49

GolfScript 1 ไบต์

$

ใช่เพียง 1 ไบต์

ลองที่นี่


4
ทำเครื่องหมายว่าถูกต้องเพราะไม่มีใครสามารถเอาชนะได้ 1 ไบต์

9
@Kslkgh ตามทฤษฎีแล้วอาจมีใครบางคนสามารถหาภาษาที่สามารถทำได้ใน 0 ไบต์?
jimmy23013

2
ฉันจะบอกว่าสิ่งนี้ล้มเหลวสำหรับ "Hello"
James Webster

3
ดูเหมือนว่าจะทำลายอะไรที่มีเงินทุน แต่คิดว่ามันก็ไม่เคยระบุ
Lain

1
เมืองหลวงไม่ทำลายรหัส มันจะเรียงลำดับตัวพิมพ์ใหญ่แล้วตัวพิมพ์เล็ก ie cbaCBAfed -> ABCabcdef
Mully

25

C (กับ x86), 61 ไบต์

s[];main(){qsort(s,read(0,s,99),1,"YXZQQQ\x8a\x00*\x02\x0f\xbe\xc0\xc3");puts(s);}

สตริงที่มีไบต์ดิบไม่ได้เกิดขึ้นจริง\x..รหัสและมันเป็นเครื่องดิบรหัสโทรกลับqsortส่งผ่านไปยัง ใช้งานได้กับ x86 เท่านั้น:

59         pop   ecx
58         pop   eax
5a         pop   edx
51         push  ecx
51         push  ecx
51         push  ecx
8a 00      mov   al,  BYTE PTR [eax]
2a 02      sub   al,  BYTE PTR [edx]
0f be c0   movsx eax, al
c3         ret

ซึ่งเป็นหลัก:

int func(char *a, char *b) { return *a - *b; }

ดู p6-7 นี้หนังสือเล่มเล็ก ๆ ในญี่ปุ่นโดย shinh


นี่ไม่ใช่ภาษา C ทั่วไปเนื่องจากเป็นเป้าหมายของสถาปัตยกรรมเฉพาะ ควรระบุไว้ในหัวเรื่อง
edc65


19

ติดอยู่ 5 ไบต์

ในที่สุดฉันก็ใช้ภาษาของฉันติดอยู่ ! : D

s$""j

สิ่งนี้รับอินพุตผ่าน stdin เรียงลำดับเชื่อมและพิมพ์โดยปริยาย นี่ทำให้ฉันมีความคิดสำหรับการเปลี่ยนแปลงแม้ว่า

แก้ไข:โอ้ว้าวมีคนโพสต์แล้วและเอาชนะฉันในภาษาของฉันเอง!


16

GOTO ++, 432 430 ไบต์

เว็บไซต์ของโครงการ GOTO ++

niveaugourou 0
s=ENTRETONTEXTE()
§2 a=LeCaracNumero()&s *(1)
n=*(1)
costaud i=*(2)/&i infeg NombreDeLettres(&s)/i=+*(1)
b=LeCaracNumero()&s &i
GOTONULPOURLESNULS %1 }&b inf &a{
a=&b
n=&i
§1 faiblard
GOTOPRINTDUTEXTE()&a
t=PrendsUnMorceau()&s *(0) &n
u=PrendsUnMorceau()&s }&n+*(1){ *(0)
e=BOITEAPINGOUINS()&t &u
s=Marijuana()&e «»
GOTONONNULPOURLESNULS %3 }NombreDeLettres(&s) eg *(1){
GOTOPASMALIN %2
§3 GOTOPRINTDUTEXTE()&s

ไม่แน่ใจว่าทำไมฉันถึงทำแบบนี้กับตัวเอง แต่ฉันทำ


13

gs2, 1 ไบต์

/

เช่นเดียวกับคำตอบ GolfScript แต่gs2ใช้ตัวดำเนินการอื่นในการเรียงลำดับ


10

Perl, 18 ไบต์

print sort<>=~/./g

ขอบคุณ Dom Hastings ที่ช่วยฉันประหยัด 3 ไบต์


คุณสามารถบันทึกไม่กี่ไบต์โดยใช้/./gแทนsplit'',: print sort<>=~/./g!
Dom Hastings

ด้วยคุณสามารถทำได้-nE say sort/./g
เดนนิส




6

C #, 114 110 ตัวอักษร

รับอินพุตจากอาร์กิวเมนต์บรรทัดรับคำสั่ง ไม่ใช่โปรแกรมที่สั้นมาก แต่ก็ดี ... มันคือ C # : P

namespace System.Linq{class P{static void Main(string[]a){Console.Write(string.Concat(a[0].OrderBy(x=>x)));}}}

ขอบคุณ Abbas สำหรับการบันทึก 4 ไบต์!


1
คุณสามารถบันทึก 4 ตัวอักษรโดยใช้แทนWrite WriteLine;)
Abbas

@Abbas ขอบคุณ! พลาดไปเลยนั่นคือ p
ProgramFOX

6

Brainfuck, 40 ไบต์

,[>>+>>,]<<[[<<]>>[-[<]>>[.<<->]>+>>]<<]

วิธีนี้ใช้อัลกอริทึมการเรียงลำดับการนับซึ่งทำให้นี่เป็นโซลูชันO (n)

รหัสต้องใช้เทปไม่มีขอบไม่มีที่สิ้นสุดหรือเทปห่อของ 8 บิตเซลล์ ลองออนไลน์!

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

,          Read a char from STDIN.
[          While the byte under the pointer (last read char) is non-zero:
  >>+        Move the pointer two steps to the right and increment.
  >>,        Move the pointer two steps to the right and read a char.
]
<<         Move the pointer two steps to the left.

           If the input was "sort", the tape now contains the following:
           0 0 115 0 1 0 111 0 1 0 114 0 1 0 116 0 1 0 0
                                                   ^

[          While the byte under the pointer is non-zero:
  [<<]       Advance two steps to the left until a null byte is encountered.
  >>         Advance two steps to the right.

             This will place the pointer on the first input character.

  [          While the byte under the pointer is non-zero:
    -          Decrement.
    [<]        Move the pointer to the left until a null byte is encountered.
    >>         Move the pointer two steps to the right.

               If the decremented character is non-zero, [<] will move to the
               null byte before it, so >> brings the pointer to the null byte
               after it. If the decremented character is zero, [<] is a no-op, so
               >> advances two steps to the right, to a non-zero byte.

    [          While the byte under the pointer is non-zero:
      .          Print the char under the pointer.
      <<-        Move the pointer two steps to the left and decrement.
      >          Move the pointer to the right.
    ]

               If the decremented character gave zero, this will print the value
               of the accumulator after it, and decrement the character once more
               to make it non-zero, then place the pointer to the right of the
               character, thus exiting the loop.

    >+         Move the pointer to the right and increment.

               This increments the accumulator each time an input character is
               decremented.

    >>         Move the pointer two steps to the right.

               This moves the pointer to the next character.
  ]
  <<         Move the pointer two steps to the left.

             This moves the pointer to the accumulator of the last character.
]

             After 255, th accumulator wraps around to 0, and the loop ends.





4

Java 8, 119 ไบต์

นี่เป็นเพียงการแข่งขันกับคำตอบ C # เพราะจาวา

(อย่างน้อยก็เต้น GOTO ++ ไม่ประสบความสำเร็จจริงๆ ... )

class C{public static void main(String[]s){s=s[0].split("");java.util.Arrays.sort(s);System.out.print("".join("",s));}}

ขอบคุณ ProgramFOX สำหรับการบันทึก 1 ไบต์ rink.attendant สำหรับการบันทึก 2 ไบต์


คุณสามารถบันทึกหนึ่งถ่านโดยการลบช่องว่างระหว่างและString[] s
ProgramFOX

โอ้ฉันลืมไปแล้ว ตอนนี้จำนวนไบต์ของฉันคือจำนวนสแควร์ที่ดี ขอบคุณ!
TheMadHaberdasher

ฉันคิดว่าคุณสามารถใช้System.out.printแทนprintln
rink.attendant.6

ขอบคุณ! นี่เป็นความพยายามครั้งแรกของฉันที่การตีกอล์ฟดังนั้นฉันยังต้องเรียนรู้สิ่งต่าง ๆ เช่นนั้น
TheMadHaberdasher

คุณสามารถบันทึก 12 ตัวละครด้วยpublic static void main(String[]s){s[0].chars().sorted().forEach(i->System.out.print((char)i));}
assylias


3

JavaScript (ES6), 32 ไบต์

การสาธิตใช้งานได้เฉพาะใน Firefox และ Edge ขณะเขียนเท่านั้นเนื่องจาก Chrome / Opera ไม่รองรับ ES6 ตามค่าเริ่มต้น:

แก้ไข: ผมไม่ได้มองไปที่คำตอบก่อนที่จะโพสต์ แต่ตอนนี้ฉันรู้ว่ามันสวยมากแน่นอนเช่นเดียวกับหนึ่งโดย NinjaBearMonkey

f=x=>alert([...x].sort().join``)
<form action=# onsubmit='f(document.getElementById("I").value);return false;'>
  <input type=text pattern=\w+ id=I>
  <button type=submit>Sort letters</button>
</form>



2

สกาลา 21 ไบต์

print(args(0).sorted)

เรียกใช้จากตัวอย่างบรรทัดคำสั่ง:

$ scala -e "print(args(0).sorted)" this
hist


2

จูเลีย 21 ไบต์

s->join(sort([s...]))

และเพื่อความสนุกนี่คือวิธีที่คุณสามารถทำได้โดยไม่ต้องใช้ฟังก์ชั่นการเรียงลำดับ inbuilt ขนาด 53 ไบต์:

f=s->s>""?(k=indmax(s);f(s[k+1:end]s[1:k-1])s[k:k]):s

2

JavaScript ขนาด 34 ไบต์

alert([...prompt()].sort().join``)

เหตุผลนี้มีความยาวมากว่า JavaScript สามารถเรียงลำดับอาร์เรย์ได้เท่านั้นดังนั้นสตริงจะต้องแยกออกเป็นอาร์เรย์เรียงลำดับแล้วรวมกลับเข้ามาในสตริง นี่คือ ECMAScript 6; เทียบเท่าใน ES5 คือ:

alert(prompt().split('').sort().join(''))

ควรระบุ EcmaScript 6 ตามที่ใช้งาน...และสตริงเทมเพลต
edc65

@ edc65 คุณถูกต้องฉันลืม เสร็จสิ้น
NinjaBearMonkey

1

Python 2, 33 32 ไบต์

print`sorted(raw_input())`[2::5]

แรงบันดาลใจอย่างมากจากคำตอบของ @ Kamehameha แปลงเป็นไพ ธ อน 2 ไม่สามารถเล่นกอล์ฟได้มากขึ้น


1
คุณสามารถใช้reprเพื่อนำมาลงไบต์อื่น (ตอนนี้คุณรู้ว่าทำไมฉันเลือก Python 3 รุ่นของการแก้ปัญหา: P) - print`sorted(raw_input())`[2::5](นั่นคือ backticks ไม่ใช่คำพูดเดียว)
Kamehameha

1

APL, 7 ตัวอักษร

ใช้งานไม่ได้กับ ngn-apl สำหรับฉัน แต่ควรทำงานในทางทฤษฎี:

X[⍋X←⍞]

Xอ่านบรรทัดจากอินพุตมาตรฐานซึ่งได้รับมอบหมายให้ ⍋XคือดัชนีXที่ให้เรียงลำดับจากน้อยไปมากและX[...]เรียงลำดับXตามดัชนีเหล่านี้


1
ใช้งานได้กับ Dyalog (เวอร์ชั่นเดสก์ท็อปไม่ใช่ TryAPL)
Alex A.



1

นิมิต, 102 101 79 73 ไบต์

let s=stdin.readAll
for i in 1..'~':
 for j in s:(if i==j:stdout.write j)

ยังคงเรียนรู้นิ่มและเล่นกอล์ฟ เห็นได้ชัดว่าดีกว่าที่จะไม่ใช้ builtin sortซึ่งต้องการการนำเข้าจำนวนมาก (ขอบคุณ @Mauris)


let s=stdin.readAll;for i in 1..'~':(for j in s:(if i==j:echo j))คือ 65 ไบต์
ลินน์

@Mauris ว้าวฉันไม่คิดว่าการใช้แบบ builtin จะสั้นกว่านี้! แต่ปัญหาเท่านั้น - มีวิธีการที่echoไม่ขึ้นบรรทัดใหม่หรือไม่?
Sp3000

อ๊ะแน่นอน stdout.write jดูเหมือนว่าจะใช้งานได้และสั้นกว่า&=ลูปของคุณเล็กน้อย
ลินน์

@Mauris แน่นอนว่ามันใช้งานได้ดีขอบคุณ :)
Sp3000

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