การแปลงเป็นภาษาลับ


9

เขียนรหัสในภาษาใด ๆ ที่ป้อนสตริงเช่น "วันนี้เป็นวันที่ดีมาก" (โปรดทราบว่าไม่มีเครื่องหมายวรรคตอน) และแปลงเป็น "ภาษาลับ" นี่คือกฎสำหรับ "ภาษาลับ"

  • a = c, b = d, c = e และอื่น ๆ (y = a และ z = b)
  • แยกแต่ละคำด้วยช่องว่าง
  • ตรวจสอบให้แน่ใจว่ามีการใช้อักษรตัวพิมพ์ใหญ่ที่เหมาะสม

ตัวอย่าง:

Input: "Today is a great day"

Output: "Vqfca ku c itgcv fca"

เป็นการประกวดความนิยม ผู้ใช้รายอื่นควรให้คะแนนด้วยการค้นหารหัส "ถึงจุด" แต่ "ไม่ซ้ำกัน" ส่วนใหญ่

ความท้าทาย: ฉันกำลังค้นหาภาษาการเขียนโปรแกรมที่ผิดปกติและฉันพบภาษาที่เรียกว่าPiet ( esolang ) ฉันท้าทายทุกคนที่จะเขียนมันในภาษานี้


ไม่ควรจะเป็นอย่างนั้นx=z, y=a, z=b?
r3mainer

คุณพูดถูก "duh" :)
Vik P

3
ผมสับสนจนกว่าฉันจะตระหนักถึงความเป็นa=c a -> c
Justin

6
ในคำอื่น ๆROT2มัน
โทเบียส Kienzler

2
ทั้ง rot13 และ rot2 เป็นciphers Caesar ที่มีคีย์ต่างกัน (13 และ 2)
Sylwester

คำตอบ:


18

Smalltalk (Smalltalk / X), 29 27 ตัวอักษร

ฉันโชคดี - มันมีอยู่แล้วในคลาส String:

'Today is a great day' rot:2
    -> 'Vqfca ku c itgcv fca'

เพิ่ม I / O สิ่งนี้ทำให้:

(Stdin nextLine rot:2)print

ด้วยจิตวิญญาณของตัวอย่างที่สับสนของลูกบิดประตูด้านล่างเป็นอย่างไร:

Parser evaluate:('(Uvfkp pgzvNkpg tqv:2)rtkpvPN' rot:-2)

2
ฉันไม่เคยคิดว่าฉันจะเห็นทางออกของ Smalltalk!
แปรงสีฟัน

13

Ruby รุ่นที่สับสน (พร้อมคำอธิบายรวมอยู่ด้วย!)

ฉันขอแนะนำให้อ่านทุกสิ่ง; ฉันคิดว่ามันค่อนข้างสนุก;)

$s='';class Module;def const_missing c

# MAGIC:
$s+="#{c}".split("#{$;}").map{|x|x.ord-8**2}.reduce(:"#{43.chr}").chr;end;end

              # My commentary ;)

ZZZY          # ?
YAYYY         # Oookay; you seem excited
Yaz           # Typo?
Yay           # Better
JEEEEEEF      # You misspelled Jeff's name
LAZZZY        # Yes, you are very lazy
Yax           # Another typo...
LLAMA         # Definitely not completely random at all...
EEEEEEEEEEEEE # Ouch my ears
IIIII         # Ouch stop
ASDFASDFASDF  # I SAID STOP BANGING ON THE KEYBOARD
YUMMY         # ... you eat keyboards?
IIIII         # Stop!
YUMMYY        # Why are you eating your keyboard
LLAMA         # That doesn't make sense :(
VV            # :(
LLAMA         # Could you stop saying that?!
CODEGOLF      # Yay, one of my favorite SE sites! :D
VW            # I don't drive
ASDFASDFASDF  # Why do you keep banging on your keyboard?!?!
EEEEEEEEEEEEE # No
VVV           # Stop
HELLOo        # ...it's a little late for a greeting, isn't it?
DOGS          # ...
OOOOOo        # No, you're not a ghost.
HELLOOOO      # Just a *bit* late.
NNNNNNN       # Huh?
LLAMA         # I said to stop.

print eval$s

คำแนะนำเกี่ยวกับวิธีการทำงาน (สปอยเลอร์เลื่อนเพื่อแสดง):

รหัสนี้สร้างสตริงและประเมินแล้ว

มันใช้const_missingเพื่อสร้างตัวละครสตริงโดยตัวละคร

gets.tr'A-Za-z','C-ZABc-zab'สตริงก็ลงท้ายอาคาร


ความเห็นอ่านเหมือนการแชทในคำถามนี้: codegolf.stackexchange.com/questions/20914/who-is-this-chatbot/

13

ป.ล.

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

/define_Secret_font {
    /Secret_font
    /Coronet findfont dup 
    /Encoding get 
    aload pop 256 array astore 
    /secret_proc {
        2 copy
        26 getinterval aload pop 
        26 -2 roll 26 array astore
        putinterval
    } def
    dup 65 secret_proc
    dup 97 secret_proc
    exch dup length dict dup
    3 -1 roll {put dup} forall
    exch /Encoding 4 -1 roll put 
    definefont pop
} def

และอนุญาตให้ใช้แบบอักษรเท่านั้นเช่น:

define_Secret_font
/Secret_font 36 selectfont
0 841 translate
20 -60 moveto
(Today is a great day) show
20 -120 moveto
(Programming Puzzles & Code Golf) show
showpage

และนั่นคือสิ่งที่มันพิมพ์: ป้อนคำอธิบายรูปภาพที่นี่


11

ทุบตี

คลาสสิก

tr A-Za-z C-ZABc-zab

ตัวอย่าง:

$ tr A-Za-z C-ZABc-zab <<< "Today is a great day"
Vqfca ku c itgcv fca

ฉันคิดว่าคุณไม่ต้องการคำพูด
marinus

@marinus คุณพูดถูกฉันจะเปลี่ยนมัน
daniero

5

DFSORT (โปรแกรมการเรียงลำดับ IBM Mainframe)

 OPTION COPY
 INREC BUILD=(1,80,TRAN=ALTSEQ)

ไม่มีคำสั่งควบคุม SORT ใดที่สามารถเริ่มในคอลัมน์หนึ่งได้

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

โดยไม่ต้องเปลี่ยนตารางเริ่มต้นมันจะต้องมีคำสั่ง ALTSEQ ที่แสดงรายการคู่ของค่าเลขฐานสิบหกที่ต้องการทั้งหมด (จาก - รหัสฐานสิบหกทันทีตามด้วยรหัสฐานสิบหกแต่ละคู่ของค่าฐานสิบหกคั่นด้วยเครื่องหมายจุลภาค):

 OPTION COPY
 INREC BUILD=(1,80,TRAN=ALTSEQ)
 ALTSEQ CODE=(xxyy,...)

ดังนั้นเพื่อให้ได้ตัวพิมพ์ใหญ่ EBCDIC A ถึง C และ B ถึง D:

ALTSEQ CODE = (C1C3, C2C4)

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

แน่นอนว่าสำหรับภาษาใดก็ตามที่รองรับ "ตารางการแปล" มันง่ายเหมือนการเปลี่ยนตารางการแปล โปรแกรม Nice COBOL พร้อม Codepage ที่เฉพาะเจาะจงและสามารถทำได้ในหนึ่งบรรทัดของโค้ดโพรซีเดอร์ COBOL (บวกกับบรรทัดบังคับของ COBOL ที่ไปพร้อมกับทุกอย่าง ... ไม่มากในกรณีนี้)

โอ้ 1,80 เป็น "ภาพบัตร" ซึ่งจะมีข้อความ อาจเป็นตัวพิมพ์ใหญ่ทั้งหมดในการเรียกใช้ครั้งแรก ...


+1 การใช้ DFSORT สำหรับ ROT2 นั้นมีความพิเศษ
อภิสิทธิ์

3

C, 75 ไบต์

main(c){while((c=getchar())>0)putchar(isalpha(c)?(c&224)+((c&31)+2)%26:c);}

ตัวอย่าง:

$echo "Today is a great day" |./a.out
Vqfca ku c itgcv fca

สมมติว่า EOF คือ -1 คุณสามารถใช้ bitwise ~(c=getchar())เพื่อไม่บันทึก 1 char
user12205

และเนื่องจากคำถามที่บอกว่าไม่มีเครื่องหมายวรรคตอนอักขระที่ไม่ใช่ตัวอักษรเพียงตัวเดียวคือช่องว่างดังนั้นคุณสามารถทดสอบด้วยตัวเองc-32แทนซึ่งจะช่วยให้คุณประหยัดได้ 6 ตัวอักษร
user12205

นี่คือการประกวดความนิยมและไม่ใช่ code-golf
Mhmd

รหัสกอล์ฟตรงกันข้ามกับความนิยมตอนนี้หรือไม่
Desty

@ user689 คุณถูกต้องขอโทษฉันไม่ได้อ่านคำถามอย่างระมัดระวัง เนื่องจากรหัสนี้ถูกเขียนในบรรทัดเดียวกับผู้ประกอบการที่สามและไม่มีintและแม้จะมีการนับถ่านให้ฉันจึงสันนิษฐานว่ามันเป็นรหัสกอล์ฟ ขอโทษ
user12205

3

หลาม

a = list('abcdefghijklmnopqrstuvwxyz')
b = list('yzabcdefghijklmnopqrstuvwx')

c = {}

#generate conversion dictionary

for i in range(len(a)):
    c[a[i]] = b[i]

instring = "the weather is very nice today"

outstring = ""

for i in list(instring):
    try:
        outstring += c[i]
    except:
        outstring += i

print outstring

เอาท์พุท:

rfc ucyrfcp gq tcpw lgac rmbyw


(1) +3ใช่มั้ย (2) คุณสามารถอินไลน์หลาย ๆ อย่างเพื่อทำให้มันซับซ้อนมากขึ้น (ดูเหมือนว่าจะเป็นแนวโน้มที่นี่)
Simon Kuang

b = a[2:] + a[:2]จะพิมพ์ผิดได้ง่ายน้อยลงและดูเหมือนว่าไม่จำเป็นต้องแปลงสตริงaเป็นlist
Tobias Kienzler

c = dict(zip(a,b))โอ้และ และexceptไม่ควรใช้แบบทั่วไปให้ใช้except KeyError
Tobias Kienzler

strการต่อข้อมูลช้ามาก สร้างlistและเข้าร่วมพวกเขาด้วยกันจะดีกว่ามาก
yegle

3

JavaScript

// setup alphabet and secret rotated alphabet
//
var alpha=' abcdefghijklmnopqrstuvwxyz'
var rotor=' cdefghijklmnopqrstuvwxyzab'
alpha+=alpha.toUpperCase()
rotor+=rotor.toUpperCase()

function encrypt(str) {
 return crypt(str, alpha, rotor)
}

function decrypt(str) {
 return crypt(str, rotor, alpha)
}

// swap position of char from one dictionary to the other
function crypt(msg, d1, d2) {
 var out=''
 var len=str.length
 for(var i=0; i < len; i++) {
  var c = msg.charAt(i)
  var j = d1.indexOf(c)
  out += d2.charAt(j)
 }
 return out
}

3

PHP

ไม่ใช่คนที่สั้นที่สุด!

ตัวอย่างสด: https://eval.in/102173

<?php
$str = 'Today is a great day';
$out = implode('', array_map(function ($val) {
  if ($val == ' ') return ' ';
  $c = ord($val)+2;

  if (ctype_lower($val)) {
    if ($c > ord('z')) {
      return chr(ord('`') + ($c - ord('z')));
    }
    return chr($c);
  }
  else {
    if ($c > ord('Z')) {
      return chr(ord('A') + ($c - ord('Z')));
    }
    return chr($c);
  }  
}, str_split($str)));

var_dump($out);

บันทึก:

ord('`') = ord('a') - 1

3

TI-Basic (ภาษาที่ใช้กับเครื่องคิดเลขกราฟ TI-83)

:ClrHome  
:" abcdefghijklmnopqrstuvwxyz" //all symbols that can be interpreted  
:Ans+Ans+Ans->Str1  
:Menu("crippter","encript",1,"decript",2  
:Lbl 2  
:1->C  
:Lbl 1  
:if not(C)  
:Imput ">",Str2  
:if C  
:Imput "<",Str2  
:length(Str2)->D  
:lenght(Str1)/3->E  
:if not(C)  
:Then  
:randInt(1,E)->B  
:sub(Str1,B,1)->Str3  
:Else  
:inString(Str1,sub(Str2,1,1),1)->B  
":"->Str3  
:For(X,1+C,D  
:inString(Str1,sub(Str2,X,1)->A  
:if not(C  
:A+E-B-X->A  
:if C  
:A+B+X-1->A  
:Str3+sub(Str1,A,1)->Str3  
:End  
:if C  
:sub(Str3,2,D-1)->Str3  
:Pause Str3  
:Goto A  

นี่เป็นซอฟต์แวร์เข้ารหัสที่ดี (สำหรับ TI-83) โดย ti-83 ฉันหมายถึงเครื่องคิดเลขในตระกูล ti-83 หรือ ti-84 "->" หมายถึง "STORE" เข้าถึงได้โดย "STO>"


3

ทับทิม 40 32

p gets.tr("A-XY-Za-xy-z","C-ZA-Bc-za-b") 

อัปเดต (เท่าที่เห็นจาก danieros bash solution):

p gets.tr("A-Za-z","C-ZABc-zab")

3

Java มันเข้าใจได้จริง

ฉันรู้ว่าอะไรก็ตามที่มีช่องว่างและวงเล็บมีปัญหากับ CG แต่นี่เป็นช็อตเดียว

    class SecretLanguage {

    public static void main(String[] args) {
    for (String S : args) {
        for (char s : S.toCharArray()) {
        System.out.print((char) (s + ((s < 'y') ? 2 : -24)));
        }
        System.out.print(" ");
    }
    }
}

มีการแข่งขันแยกต่างหากสำหรับรหัสที่ทำให้งงงวย แต่ฉันก็สามารถสร้างความขบขันได้เช่นกัน

class S{public static void main(String[]args){for(String str:args){for(char i:(str).toCharArray())System.out.print((char)(i+((i<'y')?2:-24)));System.out.print(" ");}}

2

จาวาสคริ

var str = '';
var textInput = 'myString';
for (var i = 0; i < textInput.length; i++) {
    str += textInput.charAt(i).replace(/([a-zA-Z])[^a-zA-Z]*$/, function (a) {
        var c = a.charCodeAt(0);
        switch (c) {
            case 89:
                return 'A'; //Letter Y!
            case 90:
                return 'B'; //Letter Z!
            case 121:
                return 'a'; //Letter y!
            case 122: //Letter z!
                return 'b';
            default:
                return String.fromCharCode(c + 2); //If not y, Y, z, or Z, then just two more from the usual char code
        }
    })
}
console.log(str);

ด้วยความคิดเห็นทั้งหมดหนูแฮมสเตอร์ของฉันสามารถเข้าใจสิ่งนี้ได้


2

ฉันคิดว่าฉันจะ ROT2 มัน!

จาวาสคริ

function r(a,b){return++b?String.fromCharCode((a<"["?91:123)>(a=a.charCodeAt()+2)?a:a-26):a.replace(/[A-z]/g,r)}

console.log(r('Qccipcr'));

ตอนแรกฉันคิดถึงอะไรแบบนั้น แต่ฉันไม่เคยคิด[A-z]เลย!
แปรงสีฟัน

2

Haskell

นี่คือการนำเลนส์มาใช้ ฉันใช้Isoเพื่อเป็นตัวแทนของมอร์ฟิซึ่มส์ระหว่างข้อความปกติและข้อความที่แปลงเป็นภาษาลับ หากคุณไม่มี--fromตัวเลือกอินพุตจะถูกแปลงเป็นภาษาลับ หากมีการจัด--fromเตรียมตัวเลือกไว้จะทำการแปลงตรงกันข้าม

module Main where
import Control.Lens
import System.Environment (getArgs)
import Data.Char          (ord, chr, isUpper, isSpace)
import Data.Word          (Word8)

ord8 :: Char -> Word8
ord8 = fromIntegral . ord

chr8 :: Word8 -> Char
chr8 = chr . fromIntegral

ordIso :: Iso' Char Word8
ordIso = iso ord8 chr8

firstLetterOrd :: Word8 -> Word8
firstLetterOrd n
  | n ^. from ordIso . to isUpper = ord8 'A'
  | otherwise                     = ord8 'a'

secretChar :: Iso' Char Char
secretChar =
  iso toSecret
      fromSecret
  where
    toSecret, fromSecret :: Char -> Char
    toSecret   = secretConversion   2
    fromSecret = secretConversion (-2)

secretConversion :: Int -> Char -> Char
secretConversion n c
  | isSpace c = c
  | otherwise = c & over ordIso (secretShift n)

secretShift :: Int -> Word8 -> Word8
secretShift shiftAmount =
  preserveLetters $ (`mod` 26) . (+ shiftAmount)

preserveLetters :: (Int -> Int) -> Word8 -> Word8
preserveLetters fn n =
  firstLetter + overWord8 fn (n - firstLetter)
  where
    firstLetter = firstLetterOrd n

overWord8 :: (Int -> Int) -> Word8 -> Word8
overWord8 fn = fromIntegral . fn . fromIntegral

help :: IO ()
help =
  putStr
  $ unlines
      ["SecretLang [--from]"
      ,"If the --from option is provided, the program"
      ,"converts from the secret language. Otherwise,"
      ,"it converts to the secret language."
      ]

convertContents :: (String -> String) -> IO ()
convertContents fn = do
  input <- getContents
  putStrLn . ("Output: " ++) $ fn input

main :: IO ()
main = do
  args <- getArgs

  case args of
    ("--from":_) ->
      convertContents (^. mapping (from secretChar))

    ("--help":_) -> help
    ("-h"    :_) -> help

    _            ->
      convertContents (^. mapping secretChar)

ตัวอย่าง:

$ ./SecretLang
Today is a great day
Output: Vqfca ku c itgcv fca

$ ./SecretLang --from
Vqfca ku c itgcv fca
Output: Today is a great day

1

    #include<stdio.h>

    int main()
    { char p[256];
    int i;
    fgets ( p, 256, stdin );
    for(i=0; i<256 ; i++)
    {
   if ( p[i] == '\n' )
    {
    p[i] = '\0';
    break;
    }
    else
    {

    if((p[i] >= 'a' && p[i] <= 'x') || (p[i] >= 'A' && p[i] <= 'X') )
    {
        p[i] +=2;
    }

    else
    {
    switch(p[i])
     {
        case 'y':    p[i] = 'a';
                     break;

       case 'Y':    p[i] = 'A';
                     break;

       case 'z':    p[i] = 'b';
                     break;
       case 'Z':    p[i] = 'B';
                     break;
       case ' ':    p[i] = ' ';
                     break;


     }
    }
}}

printf("%s", p);

    return 0;
 }

คุณสามารถบันทึกรหัสจำนวนมากโดยใช้ modulith arithmetic บน chars ...
blabla999

@ blabla999 นี่คือการประกวดความนิยมและไม่ใช่ code-golf
Mhmd

1
ขอโทษ - ไม่ได้หมายถึงการรุกราน ฉันมองข้ามไปว่า
blabla999


1

JAVA

32คือspaceเพื่อให้เราพิมพ์ออกมาเป็น
88เป็นXดังนั้นอะไรที่น้อยกว่า89การเคลื่อนไหวขึ้น 2 ตัวอักษร
90เป็นZดังนั้นอะไรที่น้อยกว่า91การเคลื่อนไหวลดลง 24 ตัวอักษร (มีอะไรที่น้อยกว่า89การจัดการแล้วดังนั้นเฉพาะ89และ90มีประสิทธิภาพ)
ทำซ้ำขั้นตอนเดียวกันสำหรับตัวอักษรตัวพิมพ์เล็กตั้งแต่97เป็นaไป122ตามที่z.

void secret(String s) {
    for (char c : s.toCharArray()) {
        System.out.print((char)(c == 32 ? c : c < 89 ? c + 2 : c < 91 ? c - 24 : c < 121 ? c + 2 : c - 24));
    }
}

1

Powershell

$chars = [int]('a')[0]..[int]('z')[0] | %{ [char]$_, [char]::ToUpper([char]$_) }

$y = $args[0].ToCharArray() | %{
    $idx = $chars.indexOf($_);
    if ($idx -ge 0) {
        $chars[($idx + 4) % 52]
    } else  {
        $_
    } 
}

-join [char[]]$y

เอาท์พุท:

PS C:\Temp> .\z.ps1 "Today is a great day"
Vqfca ku c itgcv fca
PS C:\Temp>


1

Python 3

ฉันคิดว่าฉันไม่ค่อยเข้าใจคำถาม แต่อย่างไรก็ตาม:

alphabet = "abcdefghijklmnopqrstuvwxyz"
rot = alphabet[2:] + alphabet[:2]
rot = rot + rot.upper()
alphabet = alphabet + alphabet.upper()

def encode_letter(letter):
    return rot[alphabet.index(letter)]

def encode_word(word):
    return "".join(encode_letter(letter) for letter in word)

def encode_string(string):
    return " ".join(encode_word(word) for word in string.split())

print("Output: " + encode_string(input("Input: ")))

1

Python 2.x

ความพยายามในโซลูชัน Python ที่มีคุณสมบัติหลากหลาย

คุณสมบัติ:

  • การใช้ dict
  • การจัดการรายการในลักษณะวงกลมเพื่อให้shift=2สามารถเปลี่ยนแปลงได้
  • คุณสามารถใช้มันเพื่อถอดรหัสเมื่อคุณรู้shift(แค่ใช้ลบ) มันจะช่วยให้คุณทดสอบผลลัพธ์ของคุณ
  • ความสามารถในการเพิ่ม "ขอบเขตการขยับ" - ขอบเขตที่คุณวนรอบ
  • ตัวเลือกที่จะเป็นstrictตัวอักษรที่ไม่ได้กำหนดหรือเพียงแค่กลับตัวอักษรที่ไม่ได้กำหนด
  • ภาษาลับไม่ทิ้งร่องรอย)

ไปที่นี่:

# Shifting scopes
lower_case = map(chr, range(97, 123))
upper_case = map(chr, range(65, 91))
space = [" "] # space will always be transformed to space

def secret(instring, shift, scopes, strict=False):
    def buildTranslationDict(scores):
        translation_dict = {}
        for scope in scopes: 
            for index in range(len(scope)): 
                translation_dict[scope[index]] = scope[(index+shift) % len(scope)]
        return translation_dict 
    translation_dict = buildTranslationDict(scopes)
    # Use the translation dictionary to transform input
    output = ""        
    for char in instring:
        if strict:
           output += translation_dict[char]   # will crash if unexpected char
        else:
            try:    
               output += translation_dict[char]
            except: 
               output += char
    return output    

พิสูจน์:

secret(instring="Today is a great day", shift=2, scopes=[lower_case, upper_case, space])
'Vqfca ku c itgcv fca'

คุณสามารถถอดรหัส'Wrpruurz lv qrw edg hlwkhu!':)


เพียงแค่อยากรู้อยากเห็นคุณพิจารณาเพิ่มพิเศษนี้คุณสมบัติ "เข้มงวด" "ไม่ถึงจุด" ?
PascalVKooten

มันจะบันทึกรหัส 6 บรรทัด ...
PascalVKooten

1
คุณกำลังพูดกับตัวเองหรือฉันกำลังพลาดอะไรอยู่หรือเปล่า? ชอบความคิดเห็นที่ถูกลบไหม
Timtech

1
Yup ลบแล้วโปรดอย่าลบความคิดเห็นของคุณด้วย ...
PascalVKooten

0

ขยาย BrainFuck

เนื่องจากนี่คือการประกวดความนิยมที่ฉันได้เขียนสิ่งนี้ด้วยความตั้งใจว่าจะเป็นเรื่องง่ายที่จะติดตามเช่นเดียวกับ EBF มีการแสดงความคิดเห็นอย่างหนักและฉันใช้มาโครในการทำให้โปรแกรมไหลตามตัวอักษรมากขึ้น

อาจเป็นสิ่งที่ยากที่สุดในที่นี้คือสวิตช์หลักเนื่องจาก EBF ไม่มีวิธีพิเศษในการทำเช่นนั้นดังนั้นในความเป็นจริงก็ไม่ง่ายกว่าวิธีที่จะทำได้ใน BrainFuck ยกเว้นตัวแปรและวงเล็บสมดุล

;;;; rot2.ebf : Perform rot2 on ascii text
;;;; Usage: bf ebf.bf < rot2.ebf > rot2.bf
;;;;        echo "Today is a great day" | bf rot2.bf
;;;;        # => Vqfca ku c itgcv fca
;;;;
;;;; BF interpreter/Compiler requirement: 
;;;; Wrapping cells at any size (allmost all of them do)
;;;;


;;; Memory map  
:tmp    ; a temporary cell used for the read routine
:input  ; a copy of the input for output purposes
:switch ; a copy of the input for the switch statements
:flag   ; flag to indicate the predicate has been processed or not

;;; Macros
;; Ultracompatible read
;; supports EOF 0, -1 and no change
{read_tmp 
  $input+ 
  $tmp(-),
  [+[-$input-]] ; blanks for all EOFs
  $switch [
    @input &clear
    $switch
  ]
}

;; for the switch we need
;; to do destructive testing
;; and we need to preserve the
;; original as well. 
{copy_input 
  $tmp(-$input+$switch+)
}

;; clears the cell
{clear (-)}

;; prints current cell
{print .}

;;; Main proram
;;; flow starts here
&read_tmp
while $tmp not eof
(
  &copy_input
  $flag+
  $switch 10-(22-(
    ;; not linefeed/space
    $switch 57-(-(31-(-(
       ;; default: not wrapping
       &clear
       $flag-
       $input 2+))))
    $flag (-
       ;; wrapping
       $input 24-)))
  $flag &clear
  $input &print &clear
  &read_tmp
)
;;; End

0

จาวาสคริ

var STR = "Today is a great day";
//so i can replace chars at a index in the string
String.prototype.replaceAt=function(i, char) {
    var a = this.split("");
    a[i] = char;
    return a.join("");
}

function secretIt( str ){
    for( var i = 0; i < str.length; i++ ) {
        var c = str.charCodeAt( i );
        /**
        * check for spaces first
        * check if get outside of the letter range for both lower and upper
        * if we dont go then were good
        * if so go back 26 chars
        */
        str = str.replaceAt( i, String.fromCharCode( ( c == 32 ) ? c : ( ( c = c + 2 ) > 91 && c < 97 || c < 123 ) ? c : c - 26 ) ) ;
    }
    return str;
}

console.log( secretIt( "Qsncp qcapcr ambc" ), ' ' , secretIt( STR ));



0

C #, 163

ใช่นี่ไม่ใช่ code-golf ฉันไปที่สั้นที่สุดแล้ว (หรืออย่างน้อยก็ทำแทงครั้งแรกที่มัน)

using System.Linq;class P{static void Main(string[]a){System.Console.WriteLine(string.Concat(a[0].Select(c=>(char)(c==32?c:c<89?c+2:c<91?c-24:c<121?c+2:c-24))));}}

จัดรูปแบบ:

using System.Linq;
class P
{
    static void Main(string[] a)
    {
        System.Console.WriteLine(string.Concat(a[0].Select(c => (char)(c == 32 ? c : c < 89 ? c + 2 : c < 91 ? c - 24 : c < 121 ? c + 2 : c - 24))));
    }
}

ใช่ฉันไม่ได้มองที่คำตอบ ufis'


0

C # 5KB

(381 ตัวอักษร)

391

using System;
namespace WinHelper {
    class P {
        static void Main(string[] args) {
            char[] f =  "abcdefghijklmnopqrstuvwxyz ".ToCharArray();
            char[] g =  "cdefghijklmnopqrstuvwxyzab ".ToCharArray();

            foreach (char c in Console.ReadLine().ToCharArray().ToLower()) 
                Console.Write(g[Array.FindIndex(f, a => a == c)]);
        }
    }
}

ขนาดที่รวบรวม (5KB) ไม่สำคัญ สำหรับcode-golfจำนวนchars (ของ sourcecode) มักจะนับ แต่เนื่องจากความท้าทายนี้เป็นการประกวดความนิยมและไม่ใช่code-golf chars / size ไม่สำคัญเลย วางเมาส์เหนือpopularity contestตราสัญลักษณ์ใต้การท้าทาย (คุณจะเห็นคำแนะนำเครื่องมืออธิบาย: " การประกวดความนิยมคือการแข่งขันที่คำตอบที่ถูกต้องกับผู้ชนะมากที่สุดคือผู้ชนะusually the most creative answer ")
RobIII

นอกจากนี้ยังเกิดปัญหากับอินพุตตัวอย่างของความท้าทายToday is a great dayเนื่องจากไม่รองรับตัวอักษรตัวพิมพ์ใหญ่
RobIII

0

Bash, 8 ตัวอักษร

... หากคุณบังเอิญติดตั้งแพ็คเกจ bsdgames! อ่านจากอินพุตมาตรฐาน

caesar 2

ตัวอย่าง

echo Today is a great day|caesar 2

เอาท์พุท: Vqfca ku c itgcv fca


0

#include <stdio.h>
char c[100];
int main()
{
gets(c);
char *p=c,x;
while(*p)
{
    x=*p;
    if(x>='a'&&x<='z')
    {
        *p=((*p-'a'+2)%(26)+'a');
    }
    if(x>='A'&&x<='Z')
    {
        *p=((*p-'A'+2)%(26)+'A');
    }

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