Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs

Dashboard
Notifications
Mark all as read
Challenges

Caesar shift cipher

+3
−0

Introduction

What is the Caesar shift cipher (ROT$n$)? It's basically a cipher sequence that changes a letter's value from the number chosen. If we use ROT1 on "games", we get "hbnft". The basic interpretation of the cipher is iterating the value of a letter by 1 $n$ times. If you still don't understand, try using the ROT13 website.

Challenge

Make a program that takes input of a number from 1 to 25, call it $n$, and takes input of a string. It could be any. Then, use $n$ to convert the string into ROT$n$ and output the result.

Examples of inputs and outputs:

If $n = 4$ and string is "Hello, world.", we get Lipps, asvph.
If $n = 15$ and string is "trololol", we get igdadada.
If $n = 7$ and string is "gxoxk zhggt zbox rhn ni", we get never gonna give you up.
If $n = 24$ and string is "I want breakfast!", we get G uylr zpcyidyqr!.
If $n = 13$ and string is "guvf grkg vf fhf", we get this text is sus.

Shortest program wins.

Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

0 comment threads

7 answers

You are accessing this answer with a direct link, so it's being shown above all other answers regardless of its score. You can return to the normal view.

+0
−0

Haskell, 74 bytes

a=ord 'a'
n!c|isLetter c=chr((rem((ord c -a)+n) 26)+a)|True=c
f n=map (n!)

Try it online!

Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

General (2 comments)
+3
−0

JavaScript (Node.js), 67 60 bytes

o=>r=>Buffer(o).map(c=>c%32<26&c>64?(c%32+r)%26+c-c%32:c)+''

Try it online!

o=>r=>                 // Define a function taking o and r, and returning...
  Buffer(o).map(c=>    // a Buffer of the charcodes of o, mapped to...
    c%32<26&c>64       // If the character is alphabetical - charcode%32 is less than 26, charcode is >64
      ?                // Then
    (c%32+r)%26+c-c%32 // Rot-n the character - Mod 32, add r, mod 26, add correct number depending on whether it's uppercase of lowercase.
    :c)                // Else return the original string
 ) + ''                // Coerce to string

-7 thanks to Shaggy.

Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

Avoid the alias (1 comment)
+2
−0

Python 3.8 (pre-release), 98 bytes

lambda s,n:''.join((c,chr((ord(c)+n-1-(o:=(64,96)[c.islower()]))%26+o+1))[c.isalpha()] for c in s)

Try it online!

Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

90 bytes (1 comment)
+2
−0

Javascript (V8), 202 97 bytes

o=>r=>o.replace(/[a-zA-Z]/g,o=>String.fromCharCode((o<="Z"?90:122)>=(o=o.charCodeAt()+r)?o:o-26))

Try it online!

Since the text of input must be manually changed from the code, here is how to change it, Go to console.log(rot("Hello World")(4)); and change text between "" (String) into anything you want lke console.log(rot("Codidact Code Golf)(4)); and if you want to change ROT$n$, change the number between brackets into anything like console.log(rot("Codidact Code Golf)(13));.

Why does this post require moderator attention?
You might want to add some details to your flag.

4 comment threads

90 bytes (2 comments)
more golfing (2 comments)
General (3 comments)
191 bytes (1 comment)
+2
−0

Ruby, 56 bytes

->s,i{a=[*?a..?z].rotate(i)*"";s.tr "A-Za-z",a.upcase+a}

Try it online!

tr is wildly useful here. Builds the tr string manually and replaces only the alphabets.

Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+1
−0

C (clang), 161 bytes

i,j,k;main(){char *s;scanf("%i%[^\n]%*c",&i,s);for(j=0;j<strlen(s);j++){if(isalpha(s[j])){for(k=0;k<i;k++){if(s[j]==90||s[j]==122){s[j]-=26;}s[j]+=1;}}}puts(s);}

Try it online!

Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+1
−0

C (gcc), 112 bytes

Function solution.

p,*a;f(char*s,int n){a=strdup(s);for(s=a;*s;s++)(p=isalpha(*s)?(*s&96)^96?65:97:0)&&(*s=(*s-p+n)%26+p);puts(a);}

Try it online!


Explanation: The code takes a hard copy of the passed parameter and increases each character with the value, but only in case it's a letter.

isalpha determines if something is a letter, then *s & 0x60 masks out lower case, since those always have bits 0x60 set (and upper always have 0x40 but not 0x60).

For upper case, p gets set to 'A', for lower case it gets set to 'a', otherwise to zero. The equation to handle wrap-around *s=(*s-p+n)%26+p only gets executed if p is not zero and basically just "modulo away" results larger than 26 - the size of the alphabet.

Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

Sign up to answer this question »

This community is part of the Codidact network. We have other communities too — take a look!

You can also join us in chat!

Want to advertise this community? Use our templates!

Like what we're doing? Support us! Donate