Cronometro (traslitterato)


12

Introduzione:

Ho un sacco di cifre diverse memorizzate in un documento che una volta ho compilato da bambino, ne ho scelte alcune che pensavo fossero le più adatte alle sfide (non troppo banali e non troppo difficili) e le trasformavo in sfide. Molti di loro sono ancora nella sandbox e non sono ancora sicuro se li posterò tutti o solo alcuni. Ecco il terzo e più semplice (dopo il Computer Cipher e Trifid Cipher che ho pubblicato in precedenza).


Con un Clock Cipher utilizziamo la seguente immagine per crittografare il testo:

inserisci qui la descrizione dell'immagine
Quindi una frase come this is a clock ciphersarebbe diventata:

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

Sfida:

Data una stringa sentence_to_encipher, codificala come descritto sopra.

Regole della sfida:

  • Puoi presumere sentence_to_encipherche conterrà solo lettere e spazi.
  • È possibile utilizzare lettere maiuscole o minuscole (indicare quale è stato utilizzato nella risposta).
  • Non è consentito aggiungere zeri iniziali per le lettere a una cifra cifrati battraverso j, ma due zeri 00sono obbligatori per gli spazi.
  • È necessario utilizzare :come separatore e :non è consentito un ulteriore comando iniziale o finale .
  • È consentito utilizzare lettere minuscole ame pmanziché maiuscole AMe PM, purché coerenti.

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Le regole standard si applicano alla tua risposta con le regole I / O predefinite , quindi puoi utilizzare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
  • Le scappatoie predefinite sono vietate.
  • Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
  • Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.

Casi test:

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"


È consentito l'output [7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]per hi bobo si deve unire il risultato? A proposito, cifra pulita!
Mr. Xcoder

@ Mr.Xcoder Siamo spiacenti, per il bene del tema della cifratura, direi che dovrebbe essere unito a una singola stringa (o l'intera cosa come un elenco di caratteri come ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']).
Kevin Cruijssen il

Risposte:



5

05AB1E , 22 21 byte

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

Provalo online! o come una suite di test

Alcune soluzioni alternative a 21 byte:

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

Bella risposta, sono riuscito a ottenere 23 byte attraverso più approcci (uno dei quali era la mia risposta attualmente eliminata). Questo è un modo pulito per organizzare il tuo stack per salvare un byte!
Mr. Xcoder

1
Un 22 byte alternativo che combina le nostre risposte: provalo online!
Mr. Xcoder

@ Mr.Xcoder: La mia prima idea in realtà sembrava così, ma 2 byte peggio perché non ricordavo che ªfosse cambiato :)
Emigna,

Ho trovato un 20 byte usando una parte dell'approccio di @ Mr.Xcoder , ma ti lascerò capire da solo prima di svelarlo. :)
Kevin Cruijssen il

1
@KevinCruijssen: ti farò sapere dopo che avrò guardato un po 'di più;)
Emigna

4

Perl 6 , 47 byte

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

Provalo online!

Anonimo Qualunque lambda che accetta una stringa di entrambi i casi e restituisce la stringa crittografata.

Spiegazione:

*.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 byte

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

Provalo online qui o verifica tutti i casi di test contemporaneamente qui .

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

C # (compilatore interattivo Visual C #) , 70 byte

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

Accetta l'input come una stringa di lettere minuscole. Per prima cosa controlla se il carattere è uno spazio e, se lo è, lo converte 00. Successivamente, verifica se il carattere è una A e lo converte in AM. Controlla di nuovo Z e lo converte in PMse lo è. Infine, se il carattere supera tutti i controlli, viene convertito nel suo ordine alfabetico-1.

-2 byte grazie a @dana

Provalo online!

// 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 byte

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

Grandemente ispirato al 22-byter di @ Mr.Xcoder nel commento della risposta 05AB1E esistente di @Emigna .

Prende l'input come un elenco di caratteri minuscoli (sarebbero 21 byte con un iniziale Sse prendo l'input come stringa).

Provalo online o verifica tutti i casi di test .

Spiegazione:

':ý            '# 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
Ah sì. Sostituendo lo spazio separatamente si salva un byte. Avrei dovuto provarlo. Bello :)
Emigna il



1

Carbone , 26 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Accetta input in lettere minuscole (può essere banalmente modificato in lettere maiuscole). Spiegazione:

UB:

Impostare il carattere di sfondo su :. Questo riempie gli spazi tra i valori di output creati dal movimento giusto.

Fθ«→

Passa sopra ogni personaggio, lasciando un vuoto ogni volta. (La prima mossa non ha alcun effetto poiché la tela è ancora vuota a questo punto.)

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

Attiva il carattere e, se è spazio, aoppure zemetti il ​​codice appropriato. Uso ×0²invece di 00qui poiché quest'ultimo costerebbe due byte in separatori aggiuntivi.

I⌕βι

Altrimenti emetti la posizione indicizzata 0 della lettera nell'alfabeto minuscolo come stringa.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.