Anweisung
Außerirdische haben sich auf der Erde niedergelassen und seltsamerweise ist ihr Alphabet genau das gleiche wie unseres. Ihre Sprache ist auch unserer sehr ähnlich, mit einigen sehr deutlichen und leicht zu berechnenden Unterschieden.
Herausforderung
Nehmen Sie einen String und geben Sie das Sprachäquivalent des Aliens aus. Die Übersetzung funktioniert so:
Vertausche alle Vokale im Wort mit dem entsprechenden:
Vowel | With
--------+--------
a | obo
e | unu
i | ini
o | api
u | iki
Sie können auch einen anderen Übersetzer schreiben, um Alien-> English zu übersetzen. Dies ist jedoch optional.
Beispiele
Input: Shaun
Output: Shoboikin
Input: Java
Output: Jobovobo
Input: Hello, World!
Output: Hunullapi, Wapirld!
Wenn der Vokal groß geschrieben ist, schreiben Sie den ersten Buchstaben groß.
Input: Alan
Output: Obolobon
Input: Australia
Output: Oboikistroboliniobo
Regeln
- Es gelten Standardlücken
- Muss für Text funktionieren, der neue Zeilen enthält
Sie können entweder eine Funktion, Lambda oder ein vollständiges Programm schreiben
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Antworten:
Haskell,
10091 Bytesquelle
TI-Basic, 173 + 59 + 148 = 380 Bytes
Hoffentlich benutzen die Aliens TI-83/84-Taschenrechner;)
Hauptprogramm, 173 Bytes
BONUS: Behalten Sie die zweite oder dritte Zeile bei, je nachdem, ob Sie einen normalen oder einen umgekehrten Übersetzer wünschen.
Unterprogramm (
prgmQ
), 59 Bytes:Unterprogramm (
prgmR
), 148 Bytes:PS steht
~
für Token0x81
und@
stellt Token dar0x7F
, erfahren Sie mehr hier .PPS Teil , warum diese Programme eine hohe Byteanzahl ist , weil
sub(
,inString(
,length(
und alle Kleinbuchstaben je zwei Bytes sind ...quelle
prgmR
undprgmQ
in Ihren Code-Überschriften?Perl, 56 Bytes
Beinhaltet +1 für
-p
Geben Sie eine Eingabe für STDIN ein
alien.pl
:Funktioniert wie gezeigt, aber ersetze die
\xXX
Escapezeichen durch die tatsächlichen Charaktere, um die beanspruchte Punktzahl zu erhaltenquelle
sed 89
quelle
Python,
999593 BytesAuf ideone.com ...
Ziemlich einfach. Nehmen Sie einfach den Index, bei dem wir jedes Zeichen in der Vokalliste finden, und verwenden Sie ihn, um die drei Zeichen zu ermitteln, die wir benötigen. Wenn es nicht gefunden wird,
.find()
kehrt-1
es zurück , kleben Sie also einfach das aktuelle Zeichen an das Ende der Zeichenfolge. Die Leerzeichen sind erforderlich, damit"a"
die hinzugefügten Buchstaben nicht enthalten sindc
. Die übersetzten Vokale werden nach Buchstabenreihenfolge gruppiert (der erste Buchstabe jeder Übersetzung, dann der zweite, dann der dritte).quelle
["aeiouAEIOU".find(c)::11] for
05AB1E ,
282720 BytesProbieren Sie es online!
Unuxplobonobotiniapin
quelle
PHP, 91 Bytes
quelle
Python, 129 Bytes
Sieh es dir auf ideone.com an
Hier ist eine besser formatierte Version:
Die interessantesten Teile sind
{ ... }.get(l.lower(), l)
die, bei denen versucht wird, den in Kleinbuchstabenl
konvertierten gespeicherten Buchstaben im Wörterbuch nachzuschlagen und entweder die übersetzte Version (falls gefunden) oder den Originalbuchstaben zurückzugebenund zu
[str, str.capitalize][ord(l) < 91]( ... )
prüfen, ob der Originalbuchstabe ein Großbuchstabe war ( ASCII-Codepunkt kleiner als 91) und ruft dann entweder diestr()
Funktion mit dem Buchstaben als Argument auf (wenn es kein Großbuchstabe ist, hat dies keine Auswirkung) oder diestr.capitalize()
Funktion (konvertiert den ersten Buchstaben der Argumentzeichenfolge in Großbuchstaben).quelle
C (gcc) ,
150 141 136134 BytesProbieren Sie es online!
Basierend auf der Antwort von @algmyr und -8 nur dank @ ASCII
Weniger Golf Version
quelle
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i-32*l),a=t?t-v:0]))l=i>96;}
a;l;i;e(char*n){for(char*v="AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i&95),a=t&&t-v<5?t-v+1:0]));}
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;)printf("%c%c%c"+4*!a,a?" OUIAI"[a]|i&32:i," bnnpk"[a]," ouiii"[t=index(v,i-i/96*32),a=t?t-v:0]);}
Batch, 215 Bytes
Übernimmt die Eingabe für STDIN. Bei der zeichenweisen Verarbeitung wird die Groß- und Kleinschreibung berücksichtigt.
quelle
Pyth, 42 Bytes
Ein Programm, das die STDIN-Eingabe annimmt und die Ausgabe druckt.
Probieren Sie es online aus
Wie es funktioniert
quelle
C 167 Bytes
Ich wollte wirklich nicht meine Gewohnheit aufgeben, beim Codieren von C immer Hauptfunktionen auszuführen, aber dies ist wesentlich kürzer als die Version mit einem Haupt und auf diese Weise bekam ich einen weiteren Buchstaben, der buchstabierte, was ich wollte!
Golf gespielt
Kommentiert
C hat etwas Besonderes und wie schrecklich Sie mit Zeigern und dergleichen umgehen können.
quelle
Netzhaut , 60 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
quelle
Javascript (ES6),
949392 Bytes1 Byte dank edc65 gespeichert 1 Byte dank Neil gespeichert
Demo
quelle
.indexOf
und.search
verwenden Sie~
stattdessen<0
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
noch 93 Bytes erhalten. Aber dac
jetzt bekannt ist, dass es sich um einen Vokal handelt, können Sie jetzt ein Byte speichern,search
anstatt esindexOf
zu verwenden!Java 8, 172 Bytes
ungolfed:
Und Alien zurück zu Englisch (171 Bytes):
Ungolfed:
quelle
Tcl, 75 Bytes
Die zu übersetzende Zeichenfolge befindet sich in der Variablen
s
.quelle
Mathematica, 128 bytes
Not sure whether a shorter program can be obtained by using
IgnoreCase->True
together with a case check.quelle
C 178 bytes
quelle
C,
163162159 bytesquelle
char*t="aeiou";
into for loop saves 1 byteC#,
133121 bytesEdit (thanks to
milk
)thank you :) I actually know this overload but somehow completely forgot it when writing this..
quelle
Select(char, int)
overload so you don't need to declarei
and can put it all in one line.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
C,
207202 bytes (thanks to Cyoce)1) I hate to omit type before any kind of declarations
2) I don't really like to put unusable code (without main() function)
Usage:
quelle
(c=getchar())!= EOF
can become~(c=getchar())
Swift 2.2 196 bytes
¯\_(ツ)_/¯
Golfed
unGolfed
quelle
var r = [
necessary?Perl 6,
8482 bytesExpanded:
Usage:
quelle
C - 192 bytes
(newlines added for clarity)
Just lookup tables and a boolean switch.
Lookup each letter in table (string) of vowels; if found, then modify it according to the rule in table
s
. Print each character followed by a string: if a vowel was found, print the character modified by the value ins
followed by the rest of the syllable stored in tablef
; if a vowel was not found, print the original character and an empty string.quelle
Ruby,
10293918878 bytesExplanation:
Execute the line like
ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}"
, next up type, for example,Australia
it should output:Oboikistroboliniobo
.It's pretty straightforward, replace all vowels with a substring based on the index of the to-be replaced vowel in (b), times 3 and the next 3 characters in the translation string.
quelle
b
into the Regexp (/[#{b=...}/
).p $*
is unnecessary-p
flag to save additional bytes.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
-pe
). How do you get 71?TI-BASIC,
201197195 bytesTo think that I'd find another TI-BASIC answer here!
Anyway, the input is an English string in
Ans
.The output is the translated string.
Examples:
Explanation:
(Newlines added for readability. Multiple lines from the same line will be denoted with a
:
in the following code block.)Notes:
TI-BASIC is a tokenized language. Character count does not equal byte count.
Lowercase letters in TI-BASIC are two bytes each.
quelle