ความยาวเท่ากันสตริงที่แตกต่างกัน


53

ท้าทาย

ได้รับไม่ว่างเปล่าสตริงSของความยาวLประกอบด้วยทั้งตัวอักษร ASCII ที่พิมพ์ออกอีกสตริงหนึ่งของความยาวLที่ประกอบด้วยทั้งหมดของตัวอักษรที่พิมพ์ ASCII แต่ไม่เท่ากับS

สำหรับจุดประสงค์ของการท้าทายนี้ ASCII ที่พิมพ์ได้คือหนึ่งระหว่าง U + 0020 และ U + 007E นั่นคือจาก (ช่องว่าง) ถึง~(tilde) บรรทัดใหม่และแท็บจะไม่รวม

ตัวอย่างเช่นที่กำหนด"abcde"เอาท์พุทที่ถูกต้องบางอย่างอาจเป็น:

  • "11111"
  • "abcdf"
  • "edcba"

แต่สิ่งเหล่านี้จะไม่ถูกต้อง:

  • "abcde"
  • "bcde"
  • "abcde0"

กรณีทดสอบ

"asdf"
"1111"
"       "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
"  0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

กฎระเบียบ

  • คุณอาจถือว่าข้อมูลประกอบด้วยตัวอักษร ASCII ที่พิมพ์ได้ทั้งหมด
  • คุณอาจไม่คิดว่าอินพุตไม่ได้มีตัวอักษรที่พิมพ์ได้ทั้งหมด 95 ตัว
  • คุณอาจสมมติว่าอินพุตมีอักขระอย่างน้อยหนึ่งตัวและมีความยาวน้อยกว่า 256 ตัวอักษร
  • เอาต์พุตยังต้องประกอบด้วยอักขระ ASCII ที่พิมพ์ได้ทั้งหมด คุณไม่สามารถยกตัวอย่างเช่นการส่งออกไบต์ \ x7F "~"สำหรับการป้อนข้อมูล
  • เอาต์พุตจะต้องแตกต่างจากอินพุตที่มีความน่าจะเป็น 1 นั่นคือคุณอาจสร้างสตริงสุ่มจนกว่าจะมีความแตกต่างจากอินพุต แต่คุณไม่สามารถส่งออกอักขระสุ่มLและหวังว่ามันจะแตกต่างกัน
  • การขึ้นบรรทัดใหม่ไม่ได้รับอนุญาตในผลลัพธ์ แต่คุณสามารถส่งออกหนึ่งบรรทัดขึ้นบรรทัดใหม่ซึ่งไม่นับรวมกับสตริง

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

นี่คือดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์ในแต่ละภาษาจะชนะ


โปรดทราบว่า "บวก" ไม่รวมสตริงว่าง เพื่อความชัดเจนเป็นพิเศษอาจแทนที่ "positive" ด้วย "ไม่ใช่ศูนย์"
CalculatorFeline

5
@CalculatorFeline แต่นั่นจะรวมถึงสตริงความยาวติดลบ
ETHproductions

1
... มันไม่มีอยู่จริง
CalculatorFeline

@CalculatorFeline ดีกว่าตอนนี้?
ETHproductions

3
ความท้าทายที่เรียบง่าย แต่ไม่สำคัญ
Weijun Zhou

คำตอบ:


34

Python 2 , 21 ไบต์

lambda s:`s`[:len(s)]

ลองออนไลน์!

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

abc  ->   'abc'  ->  'ab
     rep        chop

'โปรดทราบว่าสตริงใหม่เริ่มต้นด้วย เรามาแสดงว่าเอาท์พุทที่แตกต่างจากการป้อนข้อมูลเสมอ

  • หากอินพุตไม่มี'ดังนั้นเอาต์พุตจะเริ่มต้นด้วย'และอินพุตจะไม่

  • หากอินพุตมี a 'และ แต่ไม่ใช่"Python จะใช้"สำหรับเครื่องหมายคำพูดด้านนอกโดยให้อักขระตัวแรก"ที่ไม่ได้อยู่ในสตริงป้อนเข้า

  • ถ้าใส่มีทั้ง'และ"แล้วคำพูดที่ด้านนอก'และแต่ละรอดไปอย่าง' \'เมื่อใดก็ตามที่"ปรากฏครั้งแรกในอินพุตมันจะถูกเลื่อนไปทางขวาโดยค่าเริ่มต้น'ในเอาต์พุตและจากการหลบหนีที่เป็นไปได้ ซึ่งหมายความว่าไม่สามารถจับคู่กับ"ในตำแหน่งที่สอดคล้องกันในผลลัพธ์

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

โปรดทราบว่ามันสำคัญมากที่ Python จะปรับเปลี่ยน"เป็นกรณีที่สอง '\'ถ้ามันไม่ได้ทำเช่นนั้นก็จะล้มเหลวในการป้อนตัวอักษรสามตัว หรือคำนำหน้าใด ๆ อีกต่อไปของสตริงแก้ไขการแสดง'โดยใช้ ดังนั้นวิธีนี้ใช้ไม่ได้กับภาษาส่วนใหญ่


อะไรคือเหตุผลในการทำดัชนี ' len(s)มากกว่า-2?
Julian Wolf

1
@JulianWolf สำหรับการป้อนข้อมูลที่มีทั้งสอง'และ"จะมีการเพิ่มมากกว่า 2 ตัวอักษรเพราะต้องใส่เครื่องหมายอัญประกาศ
Anders Kaseorg

มีเหตุผล; ไม่ได้คิดว่า ขอบคุณ!
Julian Wolf

คุณสามารถใช้[2:]แทน[:len(s)]การลงได้ถึง 16 ตัวอักษร
xbarbie

@xbarbie นั่นไม่ได้ให้ความยาวเท่ากันเสมอไปหากมีตัวละครที่ต้องการหลบหนี
xnor


15

JavaScript (ES6), 37 33 36 29 26 18 21 19 ไบต์

s=>s.slice(1)+ +!+s

ลองออนไลน์!

-4 ไบต์ขอบคุณ ETHProductions

-7 + -5 + -2 ไบต์ขอบคุณที่ CalculatorFeline

-3 ไบต์ขอบคุณ Rick Hitchcock

ย้ายอักขระตัวแรกไปยังจุดสิ้นสุดและตั้งค่าเป็น 0 หากเป็นตัวเลขและไม่ใช่ศูนย์และเป็นอย่างอื่น 1

คำอธิบาย

s=>                    anonymous function with parameter s
                 +s    convert s to a number
                !      not (converts to boolean; relevant: 0->true,1->false)
               +       convert !+s back to number (true->1, false->0)
   s.slice(1)+         prefix the rest of the string
              ␣        needed to avoid the +s combining

พิสูจน์

เพราะถ่านที่สองกลายเป็นที่หนึ่งถ่านที่สามจะกลายเป็นที่สอง ฯลฯ ตัวอักษรทั้งหมดจะต้องเหมือนกัน ถ่านที่เหลือสุดท้ายสามารถเป็น 0 หรือ 1 เท่านั้นดังนั้นถ่านที่ทำซ้ำจะต้องเป็น 0 หรือ 1 แต่สตริงใด ๆ ของ 0s จะสร้าง 1 ในตอนท้ายและในทางกลับกัน; ดังนั้นจึงเป็นไปไม่ได้ที่จะสร้างอินพุตที่เท่ากับเอาท์พุท -ETHProductions

ดูการแก้ไขสำหรับเวอร์ชันและคำอธิบายเดิม

f=
s=>s.slice(1)+ +!+s

console.log(f("000"))
console.log(f("111"))
console.log(f("001"))
console.log(f("110"))
console.log(f("~"))
console.log(f("111111111111111111111111111111111111111111111111111"))
console.log(f("Hello world!"))
console.log(f("23"))
console.log(f(" "))
console.log(f("1x"))


13

เยลลี่ 3 ไบต์

~Ṿṁ

เอาท์พุทเป็นสตริงของตัวเลขเครื่องหมายจุลภาคและอักขระไฮเพน - ลบซึ่งอักขระตัวแรกจะแตกต่างจากอักขระตัวแรกของสตริงอินพุต

ลองออนไลน์!

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

~Ṿṁ  Main link. Argument: s (string)

~    Map bitwise NOT over the characters c in s.
     This attempts to cast c to int and then apply bitwise NOT, mapping
     '0', ..., '9' to 0, ..., 9 (before ~), then -1, ..., -10 (after ~).
     For non-digits, the attempt fails, mapping c to 0.
 Ṿ   Uneval, yielding a comma-separated string of integers in [-10, ..., 0].
     The first character will be '-' if s starts with a digit and '0' if not.
  ṁ  Mold; truncate the result to the length of s.

6

Haskell , 20 ไบต์

map$head.show.(<'M')

ลองออนไลน์!

แปลงสตริงของและF Tสิ่งที่สำคัญคือตัวละครFและTแปลงให้กันและกัน สิ่งนี้จะทำโดยการตรวจสอบว่าตัวละครน้อยกว่าที่Mจะได้รับTrueหรือFalseจากนั้นใช้ตัวอักษรตัวแรกของการเป็นตัวแทนสตริง


Haskell , 23 ไบต์

q '~'=' '
q _='~'
map q

ลองออนไลน์

แทนที่ตัวละครทุกตัวด้วย~ยกเว้น~กลายเป็นช่องว่าง


ความสำคัญของพื้นที่ในq '~'คืออะไร? เหตุใดจึงไม่สามารถลบได้
Cyoce

@Cyoce Haskell อนุญาตให้'ใช้เป็นอักขระในตัวระบุดังนั้นq'~'=' 'จะถูกแยกวิเคราะห์q' ~ '=' '(รายงานข้อผิดพลาดของคำศัพท์เนื่องจากข้อผิดพลาดสุดท้าย'ไม่ตรงกัน)
Ørjan Johansen

5

ช่องว่าง 59 ไบต์

ตัวแทนที่มองเห็นได้

NSSNSSSTSSSSSNSNSSNSSNSTNTSTTTTSSTNTTSNSNSTSSSNSSSNTNSSNSNN

มันทำอะไร:

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

ถอดชิ้นส่วน:

loop:
    push 32
     dup
      dup
       dup
        ichr
       get
       sub
      jn not_32
     dup
      add
not_32:
     pchr
    jmp loop

ดีเสมอที่เห็นวิธีแก้ปัญหาในช่องว่าง โดยเฉพาะอย่างยิ่งเมื่อคุณตามปกติไม่สามารถมองเห็นได้ +1
Josiah วินสโลว์

คำตอบที่ดี! ฉันพยายามหาสิ่งที่สั้นกว่ากับโครงสร้าง แต่ไม่พบอะไรเลย แต่คุณสามารถกอล์ฟ 2 ไบต์โดยการเปลี่ยนSSSTSSSSSN (push 32)ไปSSSTSSTN (push 9)และจะTSSS (add) TSSN (multiply)มันจะพิมพ์แท็บตัวละครที่มีค่า Unicode เหนือ 9 ทุกและQ(9 * 9 = 81) 0..9สำหรับตัวอักษรที่มีค่าของทุก ลองออนไลน์ raw 57 ไบต์หรือลองออนไลน์ด้วยการเน้นและคำอธิบายเพิ่มเติม
Kevin Cruijssen

ละเว้นความคิดเห็นของฉันด้านบน สำหรับความท้าทายแท็บจะไม่ถือว่าเป็นตัวอักษร ASCII พิมพ์ ..
เควิน Cruijssen

5

MATL , 6 5 ไบต์

Qo!V!

ลองออนไลน์!

คำอธิบาย

Q     % Implicitly input a string. Add 1 to each code point.
o     % Parity: 0 if odd, 1 if even. Note that '0' has ASCII code 48, so after
      % having added 1 it now gives 1. Similarly. '1' has ASCII code 49, so it
      % now gives 0. All other chars give 0 or 1. 
!V!   % Convert each number to the corresponding char. Implicitly display

นั่นคือ 5 ใน CJam: l'0f=(ถ้าทำในสิ่งที่ฉันคิดว่าทำ)
Martin Ender

@MartinEnder ใช่มันเป็นอย่างนั้น :-) ฉันเพิ่งเพิ่มคำอธิบาย
Luis Mendo

5

Haskell , 19 ไบต์

Stringฟังก์ชั่นที่ไม่ระบุชื่อซึ่งจะใช้เวลาและผลตอบแทน (map$(!!1).show.succ) "1111"ใช้เป็น

map$(!!1).show.succ

ลองออนไลน์! (ใช้ชุดทดสอบของ @ xnor)

  • สำหรับอักขระแต่ละตัวในสตริงอินพุตให้เพิ่มอักขระจากนั้นแปลงเป็นรูปแบบตัวอักษรจากนั้นใช้อักขระตัวที่สองของตัวอักษรซึ่งเป็นอักขระหลังจากเครื่องหมาย'คำพูดเริ่มต้น
  • สำหรับอักขระที่พิมพ์ได้เกือบทั้งหมดผลลัพธ์นี้เป็นเพียงอักขระที่เพิ่มขึ้น ข้อยกเว้นคือ&และ~ซึ่งแทนที่จะให้\เพราะผู้สืบทอด'และ\DELได้รับการหลบหนีในตัวอักษร

ค่อนข้างแน่ใจว่าheadสามารถใช้แทน(!!1)ไบต์พิเศษ
Julian Wolf

ไม่headเป็นไม่ได้(!!0) มันจะล้มเหลวในตัวละคร(!!1) '
Ørjan Johansen

อ่าใช่มั้ย ฉันแค่อ่านคำตอบของไพ ธ อนและลืมว่าคำพูดมักจะต้องการการดูแลเป็นพิเศษ
Julian Wolf

4

05AB1E , 5 ไบต์

žQDÀ‡

ลองออนไลน์!

คำอธิบาย

แทนที่ถ่านแต่ละตัวด้วย ascii ถ่านตัวถัดไปที่พิมพ์ได้จากตัวหนอนไปยังพื้นที่

žQ     # push a string of printable acsii chars (space to tilde)
  D    # duplicate
   À   # rotate left
    ‡  # translate

4

V , 7 ไบต์

íÁ/a
g?

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด!

มันทำงานยังไง?

พิจารณาสตริงทั้งหมดที่ประกอบด้วย ASCII ที่พิมพ์ได้ สตริงทุกตัวต้องมี 1) มีอักขระที่เป็นตัวอักษรหรือ 2) ไม่มีอักขระที่เป็นตัวอักษร

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

í       " Substitute:
 Á      "   A non-alphabetic character ([^a-zA-Z])
  /     "   with
   a    "   the letter 'a'
g?      " Perform ROT13 on...
        "   (Implicit) the current line.

ตัวแบ่งนี้ถ้าคุณมีจำนวนอย่าง9เดียวที่เพิ่มขึ้นมันจะเพิ่มตัวละครอีกตัวหนึ่งเข้ากับสตริง
nmjcman101

@ nmjcman101 อ้านั่นเป็นจุดที่ดี ฉันเปลี่ยนกลับแล้ว
DJMcMayhem

ฉันชอบสิ่งที่ ROT13 แต่ฉันไม่ทราบว่า V (im) สามารถทำเช่นนั้นได้
nmjcman101

4

C (gcc) , 22 ไบต์

f(char*s){*s=65+*s%2;}

ใช้ตัวชี้สตริงและแก้ไขอักขระตัวแรกในตำแหน่ง

ลองออนไลน์!


1
*s=159-*sสั้น: เปลี่ยนบิตสุดท้ายเสมอดังนั้นจึงไม่ให้อักขระเหมือนกัน โปรดทราบว่า159 = ' ' + '~'
celtschk

ฉันคิดว่าคุณหมายถึง 158 = '' + '~' 159-32 = 127 ซึ่งจะเป็นอักขระนอกขอบเขต แต่ความคิดที่ดี
Computronium

@celtschk Involutions ไม่สามารถทำงานได้เนื่องจากมีจำนวนคี่ (95) ของ chraracters ที่พิมพ์ได้ดังนั้นอย่างน้อยหนึ่งในนั้นจะแมปกับตัวเอง
Dennis

@Computronium: โอ๊ะคุณพูดถูกฉันมีรหัสตัวละคร~ผิด
celtschk

4

C (gcc) , 20 ไบต์

คำตอบของ Saw Dennis ซึ่งคิดว่าจำเป็นต้องปรับปรุง 2 ไบต์

f(char*s){*s^=*s/3;}

ลองออนไลน์! (ส่วนท้ายโดย Dennis)

เช่นเดียวกับต้นฉบับปรับเปลี่ยนอักขระตัวแรกของสตริงในตำแหน่ง แต่ xors ด้วยค่าของมันหารด้วย 3 (จำนวนที่น้อยที่สุดที่ทำงานได้ 2 ล้มเหลวในอักขระเดี่ยว'U'ซึ่งให้ 127 ไม่พิมพ์ได้)


4

Python 2 , 25 ไบต์

lambda s:`s<'T'`[0]+s[1:]

ลองออนไลน์!

เด Kaseorg บันทึกไบต์โดยแยกตัวอักษรตัวแรกจากหรือTrueFalse


ฉันขอแนะนำให้เปลี่ยน'?'เป็นรหัส 2 หลัก แต่ Python ไม่ใช่หนึ่งในภาษาเหล่านั้นที่คุณสามารถทำได้ :(
CalculatorFeline

ตัวแปรบันทึกไบต์ (แต่ทิ้งความเข้ากันได้ของ Python 3): lambda s:`+(s<'1')`+s[1:]หรือlambda s:`s<'T'`[0]+s[1:]
Anders Kaseorg



3

CJam , 5 ไบต์

l)iA%

ลองออนไลน์!

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




3

Cubix , 10 ไบต์

..@|i?2%)O

ลองออนไลน์! หรือดูมันทำงาน!

สำหรับถ่านแต่ละตัวพิมพ์1ถ้าถ่านมีจุดรหัสคู่2มิฉะนั้น; 1มีจุดรหัสคี่และ2คู่ดังนั้นผลลัพธ์จะไม่เท่ากับอินพุต

คำอธิบาย

รหัสนี้สอดคล้องกับคิวบ์สุทธิต่อไปนี้:

    . .
    @ |
i ? 2 % ) O . .
. . . . . . . .
    . .
    . .

IP (ตัวชี้คำสั่ง) เริ่มต้นที่มุมซ้ายบนของใบหน้าซ้ายสุดมุ่งหน้าไปทางทิศตะวันออก มันเป็นไปตามคำแนะนำชุดนี้:

i     Grab a char-code from STDIN and push it to the stack (-1 if there is no more input).
?     If the top item is negative, turn left and hit @ which ends the program.
      If it's positive (any printable ASCII char), turn right. The IP runs through a bunch
        of no-ops, then hits:
)     Increment the top item.
|     Mirror the IP's direction horizontally (turns it around).
)     Increment the top item again. The IP then wraps around again until it hits:
?     The top item is positive, so turn right.
2     Push a 2 to the stack.
%     Push the modulus of the top two items (0 for even char-code, 1 for odd).
)     Increment the result (now 1 for even char-code, 2 for odd).
O     Output as a number. The IP wraps back around to the i and the process starts again.

3

อลิซ 9 ไบต์

#oi/
t i@

ลองออนไลน์!

คำอธิบาย

แนวคิดนี้นำมาจากการส่ง CJam ของ Martin Ender อักขระตัวแรกถูกใช้เป็นจุดรหัสลด mod 10 และย้ายไปที่จุดสิ้นสุดของเอาต์พุต เนื่องจากมีการเปลี่ยนแปลงอักขระหนึ่งตัวการอนุญาตให้ใช้อักขระไม่สามารถทำให้ได้รับสายอักขระเดียวกันได้

#   skip next command
o   (skipped)
i   push first byte onto stack
    STACK: [97]
/   reflect to SE, switch to ordinal mode (implicit reflect to SW)
i   push remaining input onto stack as string (implicit reflect to NW)
    STACK: [97, "sdf"]
o   output top of stack (implicit reflect to SW)
    STACK: [97]
t   implicitly convert code point to decimal string, and extract last character
    (implicit reflect to NE)
    STACK: ["9", "7"]
o   output this last digit (implicit reflect to SE)
i   push empty string, since there is no more input to take (implicit reflect to NE)
/   reflect to S, switch to cardinal mode
@   terminate

การใช้tสำหรับ mod 10 นั้นฉลาดและดีจริงๆ :)
Martin Ender

3

Pushy 1 ไบต์

Q

ลองออนไลน์!

สิ่งนี้จะแปลงสตริงที่กำหนดให้เป็นรายการของรหัสอักขระ ASCII, จัดทำดัชนี (การทำดัชนีโมดูลาร์) เป็นตัวอักษรตัวพิมพ์ใหญ่แล้วพิมพ์ผลลัพธ์ โดยพื้นฐานแล้วตัวละครแต่ละตัวถูกแมปไปn chr(ord(n) % 26 + 65)คุณสามารถใช้โปรแกรมนี้เพื่อดูว่าการทำแผนที่ทำงานอย่างไร

ผลลัพธ์:

  • มักจะมีความยาวเท่ากันกับอินพุตเนื่องจากอักขระถูกแม็พเข้ากับอักขระใหม่โดยตรง
  • จะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น (เนื่องจากประกอบด้วยตัวอักษรตัวพิมพ์ใหญ่เท่านั้น)
  • มักจะแตกต่างจากอินพุตเนื่องจากไม่มีอักขระอินพุตที่เป็นไปได้nเช่นchr(ord(n) % 26 + 65) == nนี้เนื่องจากเป็นจริงต้องมีจำนวนเต็มxเช่นนั้น26x = 65ซึ่งไม่มีวิธีแก้ปัญหา

1 ไบต์

q

ลองออนไลน์!

คำตอบนี้เหมือนกันทุกประการยกเว้นว่าจะจับคู่กับตัวอักษรตัวพิมพ์เล็กแทนที่จะเป็นตัวพิมพ์ใหญ่ นี้ยังคงเป็นที่ถูกต้องเพราะไม่มีตัวท่านเป็นไปได้ดังกล่าวว่าnchr(ord(n) % 26 + 97) == n


2

Brain-Flakขนาด 53 ไบต์

รวม +1 สำหรับ -c

([(((()()()()){}){}){}()]({}())){{}(<({}[()()])>)}{}

สิ่งนี้จะลดอักขระตัวแรกยกเว้นว่าจะมีช่องว่างในกรณีนั้นมันจะเพิ่มอักขระตัวแรก

ลองออนไลน์!

([(((()()()()){}){}){}()]      )                     # Push: input + 1 != 33 on top of...
                         ({}())                      #    input + 1
                                {{}(<          >)}{} # If (input + 1 != 33)
                                     ({}[()()])      #   Push: (input + 1) - 2

2

เยลลี่ 4 ไบต์

^1Ṿ€

ส่งออกสตริงหลัก ไม่มีอักขระเอาต์พุตจะเท่ากับอักขระอินพุตที่สอดคล้องกัน

ลองออนไลน์!

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

^1Ṿ€  Main link. Argument: s (string)

^1    XOR each character c in with 1.
      This attempts to cast c to int, mapping '0', ..., '9' to 0, ..., 9.
      For non-digits, the attempt fails, mapping c to 0.
      After XORing with 1, we get 1, 0, 3, 2, 5, 4, 7, 6, 9, 8 for '0', ..., '9', 
      and 1 for all non-digits.
  Ṿ€  Uneval each; mapping 0, ..., 9 to '0', ..., '9'. This yields a character
      array, which is Jelly's string type.
      Note that no character is mapped to itself.


2

PHP, 30 27

<?=strtr($a=$argn,$a,$a^1);

เปลี่ยนถ่านทุกตัวให้เท่ากับถ่านตัวแรกด้วยถ่านที่มีความหมายน้อยที่สุด


"~" ใช้งานได้หรือไม่
CalculatorFeline

มันไม่ได้พลิกบิตที่สำคัญน้อยที่สุดของ char แรก มันแปลงเป็นจำนวนเต็มและพลิกบิตอย่างมีนัยสำคัญน้อยว่า ดังนั้นใช่ @CalculatorFeline, ~การทำงาน, 1การแสดงผล
ETHproductions

โอ้ ไม่!$aหรือ~$aการทำงานหรือไม่
CalculatorFeline

@ETHproductions ฉันแก้ไขครั้งล่าสุดไม่นานก่อนที่จะเข้านอนและไม่มีเวลาที่จะอัพเดท แน่นอนว่าสิทธิของคุณมันจะแปลงเป็นจำนวนเต็มก่อนดังนั้นจึงอาจไม่เปลี่ยนถ่านตัวแรก แต่บางทีตัวที่สองเช่น "12" กลายเป็น "13"
Christoph

@CalculatorFeline เศร้าทั้งล้มเหลว!$aผลัดกัน"12"เข้ามา"12"เพราะfalseจะถูกแปลงเป็นสตริงที่ว่างเปล่าดังนั้นไม่มีอะไรที่ได้รับการแทนที่และ~$aเปลี่ยนทุกอย่างลงใน unprintables เพราะ~"12"ไม่ได้แปลงเป็น int แรก แต่แท้จริงพลิกทุกบิตในสตริง
Christoph


2

Brachylogขนาด 9 ไบต์

{¬Ṣ|∧Ịh}ᵐ

ลองออนไลน์!

คำอธิบาย

"0"นี้แทนที่ตัวอักษรทั้งหมดของพื้นที่ยกเว้นพื้นที่ซึ่งจะแทนที่ด้วย

{      }ᵐ      Map on each char of the Input
 ¬Ṣ              The Input char is not " ", and the Output char is " "
   |             Or
    ∧Ịh          The Output char is "0"

2

PHP <7.1, 31 ไบต์

for(;~$c=$argn[$i++];)echo$c^1;

ลองออนไลน์!


โปรดลบโซลูชัน 66 ไบต์เนื่องจากไม่ถูกต้อง
CalculatorFeline

ล้มเหลวในการป้อนข้อมูล "1", "10", "101" ฯลฯ คุณไม่สามารถขึ้นอยู่กับความยาวของสตริงเท่านั้น
CalculatorFeline

@CalculatorFeline "1" เอาต์พุต "0", "10" เอาต์พุต "01", "101" เอาต์พุต "010" ปัญหาอยู่ที่ไหน
Christoph

@CalculatorFeline "1" => 0, "10" => 01, "101" => 010 มันล้มเหลวที่ไหน?
JörgHülsermann

1
PHP 7.1 A non-numeric value encounteredอัตราผลตอบแทน และคุณสามารถใช้แทน~ a&
ติตัส

2

Golfscript ขนาด 3 ไบต์

ลองออนไลน์!

)5%

รับค่า ASCII ของอักขระตัวสุดท้ายโมดูโล 5 และแทนที่อักขระสุดท้ายด้วยผลลัพธ์ เห็นได้ชัดว่าใช้งานได้กับอักขระที่ไม่ใช่ตัวเลข แต่ถ้าอักขระสุดท้ายเป็นตัวเลขจะเปลี่ยนด้วย ("0" mod 5 = 3, "1" mod 5 = 4, ฯลฯ )

สิ่งนี้จะทำงานกับ 7 หรือ 9 ในขณะที่ยังคงความยาวเท่าเดิม

นอกจากนี้ใช่! ฉันมีวิธีแก้ไขปัญหา Golfscript และวิธีแก้ไขที่ดีที่สุดที่นี่!


2

Funky , 26 22 ไบต์

s=>s::gsub("."a=>1&~a)

คำนวณ~aว่าสำหรับตัวเลขใดที่ไม่ใช่ตัวเลขจะส่งคืน NaN แล้ว1&จำกัด มัน 0 หรือ 1 สำหรับหลัก 0 นี้จะเป็น1และนี้จะเป็น1 0ดังนั้นสตริงนี้จึงไม่ซ้ำกันเสมอ

ลองออนไลน์!

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