นาฬิกา (แปล) รหัส


12

บทนำ:

ฉันมียันต์ต่าง ๆ มากมายที่เก็บไว้ในเอกสารที่ฉันเคยรวบรวมเมื่อตอนเป็นเด็กฉันเลือกบางอย่างที่ฉันคิดว่าเหมาะสมที่สุดสำหรับความท้าทาย ส่วนใหญ่ยังอยู่ในกล่องทรายและฉันยังไม่แน่ใจว่าฉันจะโพสต์ทั้งหมดหรือเพียงไม่กี่ นี่คืออันที่สามและง่ายที่สุด (หลังรหัสศูนย์คอมพิวเตอร์และรหัสTrifid ที่ฉันโพสต์ไว้ก่อนหน้านี้)


ด้วย Clock Cipher เราใช้ภาพต่อไปนี้เพื่อเข้ารหัสข้อความ:

ป้อนคำอธิบายรูปภาพที่นี่
ดังนั้นประโยคที่this is a clock cipherจะกลายเป็น:

t  h i s     i s     a     c l  o  c k     c i p  h e r    (without additional spaces of course, but added as clarification)
19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17

ท้าทาย:

รับสตริงsentence_to_encipherเข้ารหัสตามที่อธิบายไว้ข้างต้น

กฏท้าทาย:

  • คุณสามารถสันนิษฐานได้ว่าsentence_to_encipherจะมีเพียงตัวอักษรและช่องว่าง
  • คุณสามารถใช้ตัวพิมพ์เล็กเต็มหรือตัวพิมพ์ใหญ่เต็มรูปแบบได้ (โปรดระบุว่าคุณใช้ตัวใดในคำตอบของคุณ)
  • คุณไม่ได้รับอนุญาตให้เพิ่มศูนย์นำหน้าสำหรับตัวอักษรที่เข้ารหัสตัวเลขหลักเดียวbผ่านjแต่00จะต้องมีค่าศูนย์สองตัวสำหรับช่องว่าง
  • คุณควรใช้:เป็นตัวคั่นและ:ไม่อนุญาตการนำหน้าหรือต่อท้ายเพิ่มเติม
  • คุณได้รับอนุญาตให้ใช้ตัวพิมพ์เล็กamและpmแทนตัวพิมพ์ใหญ่AMและPMตราบใดที่มันสอดคล้องกัน

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O ที่เป็นค่าเริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีพร้อมพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

Input:  "this is a clock cipher"
Output: "19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17"

Input:  "test"
Output: "19:4:18:19"

Input:  "what time is it"
Output: "22:7:AM:19:00:19:8:12:4:00:8:18:00:8:19"

Input:  "acegikmoqsuwy bdfhjlnprtvxz"
Output: "AM:2:4:6:8:10:12:14:16:18:20:22:24:00:1:3:5:7:9:11:13:15:17:19:21:23:PM"

Input:  "easy peazy"
Output: "4:AM:18:24:00:15:4:AM:PM:24"


มันอนุญาตให้เอาท์พุท[7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]สำหรับhi bobหรือจะต้องเข้าร่วมผลลัพธ์หรือไม่ โดยวิธีการเข้ารหัสเรียบร้อย!
นาย Xcoder

@ Mr.Xcoder ขออภัยเพื่อประโยชน์ของชุดรูปแบบตัวเลขฉันจะบอกว่ามันควรจะเข้าร่วมกับสายเดียว (หรือทุกสิ่งเป็นรายการของตัวละครที่ชอบ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1'])
Kevin Cruijssen

คำตอบ:



5

05AB1E , 22 21 ไบต์

„AM24L„PM00)˜Að«s‡':ý

ลองออนไลน์! หรือเป็นชุดทดสอบ

บางคนอื่น21การแก้ปัญหาไบต์:

':ýAð«24L„AMš„PMª00ª‡
00„AM24L„PM)˜AIk>è':ý

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

1
22 byter สำรองที่รวมคำตอบของเรา: ลองออนไลน์!
นาย Xcoder

@ Mr.Xcoder: ความคิดแรกของฉันดูเหมือนจริง ๆ แล้ว แต่ 2 ไบต์แย่ลงเพราะฉันจำไม่ได้ว่าªมีการเปลี่ยนแปลง :)
23926

ฉันพบผู้ส่ง 20 คนโดยใช้วิธีการบางส่วนของ@ Mr.Xcoderแต่ฉันจะให้คุณคิดออกก่อนที่จะเปิดเผย :)
Kevin Cruijssen

1
@KevinCruijssen: ฉันจะแจ้งให้คุณทราบหลังจากที่ฉันได้ดูอีก;)
Emigna

4

Perl 6 , 47 ไบต์

*.ords>>.&{<<00 AM{1..24}PM>>[$_%32]}.join(":")

ลองออนไลน์!

ไม่ระบุชื่อแลมบ์ดาที่ใช้สตริงของเคสใดก็ได้และส่งคืนสตริงที่เข้ารหัส

คำอธิบาย:

*.ords>>.&{                         } # Map the ordinal values to
           <<              >>[$_%32]  # The index in the list
              00 AM{1..24}PM  # 00, AM, the numbers 1 to 24 and PM
                                     .join(":")   # And join with colons

3

Pyth, 25 ไบต์

j\:m@+++"AM"S24"PM""00"xG

ลองออนไลน์ได้ที่นี่หรือตรวจสอบทุกกรณีการทดสอบในครั้งเดียวที่นี่

j\:m@+++"AM"S24"PM""00"xGdQ   Implicit: Q=eval(input()), G=lowercase alphabet
                              Trailing dQ inferred
            S24               [1-24]
       +"AM"                  Prepend "AM"
      +        "PM"           Append "PM"
     +             "00"       Append "00" - this is the dictionary
   m                      Q   Map each element of Q, as d, using:
                       xGd      Get the index of d in G, -1 if not present (i.e. space)
    @                           Get the element from the dictionary at the above index
j\:                           Join the result on ":", implicit print


3

Java (JDK) , 95 ไบต์

s->{int a=0;for(var c:s)System.out.print((a++<1?"":":")+(c<33?"00":c<66?"AM":c>89?"PM":c-65));}

ลองออนไลน์!

เครดิต

  • -1 ไบต์ต้องขอบคุณ Kevin Cruijssen

หนึ่งกอล์ฟง่าย: การchar var:)
Kevin Cruijssen

ขอบคุณ! ชัดเจนแล้วตอนนี้ที่คุณแสดงให้ฉันเห็น ...
Olivier Grégoire

3

C # (Visual C # Interactive Compiler) , 70 ไบต์

s=>string.Join(":",s.Select(a=>a<33?"00":a<66?"AM":a>89?"PM":a%65+""))

รับอินพุตเป็นสตริงของตัวอักษรตัวพิมพ์เล็ก 00ตรวจสอบก่อนหากถ่านเป็นพื้นที่และถ้ามันเป็นแปลงไป ถัดไปจะตรวจสอบว่าถ่านเป็น A และแปลงเป็นAMหรือไม่ มันจะตรวจสอบอีกครั้งสำหรับ Z และแปลงเป็นPMถ้าเป็น สุดท้ายถ้าถ่านผ่านการตรวจสอบทั้งหมดมันจะถูกแปลงเป็นลำดับตัวอักษร -1

-2 ไบต์ต้องขอบคุณ @dana

ลองออนไลน์!

// Input taking a string
s => 
// Join the following IEnumerable<char> with a ":" character
string.Join(":", 
// Map all the characters in the string
s.Select(a => 
// Is the char less than 33, aka a space?
a < 33 ? 
// If so, it's a "00"
"00" 
// Else, is this an 'A'?
: a < 66 ?
// If so, convert it to "AM"
"AM" : 
// If it's not 'A' or a space, could it be a 'Z'?
a > 89 ?
// If it is, turn the character into "PM"
"PM" : 
// If it fails all of the checks above, get the characters position in the alphabet and subtract one from that.
a % 65 + ""))



2

05AB1E , 20 ไบต์

':ýð00:A24L„AMš„PMª‡

แรงบันดาลใจอย่างมากโดย@ Mr.Xcoder 's 22 byter ในความคิดเห็นของที่มีอยู่ 05AB1E คำตอบโดย @Emigna

รับอินพุตเป็นรายการของอักขระตัวพิมพ์เล็ก (จะเป็น 21 ไบต์พร้อมกับนำหน้าSถ้าฉันรับอินพุตเป็นสตริง)

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

คำอธิบาย:

':ý            '# Join the (implicit) input list of characters by ":"
                #  i.e. ["e","a","s","y"," ","p","e","a","z","y"] → "e:a:s:y: :p:e:a:z:y"
ð00:            # Replace all spaces " " with "00"
                #  i.e. "e:a:s:y: :p:e:a:z:y" → "e:a:s:y:00:p:e:a:z:y"
A               # Push the lowercase alphabet
 24L            # Push a list in the range [1,24]
    AMš        # Prepend "AM" at the start of this list
        PMª    # And append "PM" at the end of the list
               # Transliterate; mapping letters to the list-items at the same indices
                # (and output the result implicitly)
                #  i.e. "e:a:s:y:00:p:e:a:z:y" → "4:AM:18:24:00:15:4:AM:PM:24"

1
อ่าใช่ การแทนที่พื้นที่แยกต่างหากจะบันทึกเป็นไบต์ ฉันควรจะลองมัน นิสัยดี :)
Emigna


1

C # (Visual C # Interactive คอมไพเลอร์) , 98 ไบต์

s=>string.Join(':',s.Select(c=>"az ".Contains(c)?new[]{"AM","PM","00"}["az ".IndexOf(c)]:c-97+""))

รับอินพุตเป็นอักขระถ่าน (ตัวพิมพ์เล็ก) ลองออนไลน์!


82 s=>string.Join(':',s.Select(c=>new[]{c-97+"","AM","PM","00"}["az ".IndexOf(c)+1]))ไบต์:
dana

1

ถ่าน 26 ไบต์

UB:Fθ«→≡ι ×0²a¦AM¦z¦PMI⌕βι

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด ใช้อินพุตเป็นตัวพิมพ์เล็ก (สามารถเปลี่ยนเป็นตัวพิมพ์เล็กได้) คำอธิบาย:

UB:

:ตั้งค่าตัวอักษรพื้นหลังเพื่อ สิ่งนี้จะเติมเต็มในช่องว่างระหว่างค่าผลลัพธ์ที่สร้างขึ้นโดยการเคลื่อนไหวที่ถูกต้อง

Fθ«→

วนตัวละครแต่ละตัวโดยเว้นช่องว่างทุกครั้ง (การเคลื่อนไหวครั้งแรกไม่มีผลเนื่องจากผ้าใบยังคงว่างเปล่า ณ จุดนี้)

≡ι ×0²a¦AM¦z¦PM

เปิดใช้อักขระและถ้ามีที่ว่างaหรือzจากนั้นให้เอาท์พุทรหัสที่เหมาะสม ฉันใช้×0²แทนที่00นี่เพราะหลังจะมีราคาสองไบต์ในตัวคั่นเพิ่มเติม

I⌕βι

มิฉะนั้นเอาท์พุทตำแหน่ง 0 ดัชนีของตัวอักษรในตัวอักษรตัวพิมพ์เล็กเป็นสตริง


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