チャーリーと邪悪なハイフン


8

これが表音アルファベットです:

Alfa
Bravo
Charlie
Delta
Echo
Foxtrot
Golf
Hotel
India
Juliett
Kilo
Lima
Mike
November
Oscar
Papa
Quebec
Romeo
Sierra
Tango
Uniform
Victor
Whiskey
X-ray
Yankee
Zulu

可能な最小バイト数:

  1. 入力は、最初の文字が削除されたランダムな順序でこれらの単語になります。
  2. あなたの目標は、現在持っている文字だけを使って単語を元の順序に戻すことです。言い換えると、「[A] lfa」が「[B] ravo」の前にくる方法などを調べます。コードは、元のリスト、インデックスキーなどを参照してはなりません。
  3. 各単語の最初の最初の文字を復元します。

ルール

  • X線のハイフンはおそらく邪悪ですが、私も邪悪なため、とどまる必要があります。
  • 結果は文字列(たとえば、カンマまたは改行で区切られた)または配列になります。
  • スペルと大文字小文字は交渉できません。
  • 回答に出力例を示す必要はありません。

@LevelRiverStただし、最初の文字がないと並べ替えは大きく異なります
fəˈnɛtɪk

@ fəˈnɛtɪk最初の文字で各単語フラグメントにタグを付けることは、間違いなくソートの方法です。スパークルポニーの提案はOPの意図の範囲内にあると思います。確かにOPはこれに答えるべきですが、OPがノーと言った場合、観察不能な要件のため、私は再度クロージングする傾向があります。それは面倒になります(ループを使用して1つずつそれらを釣り出し、文字を追加して印刷する場合は、両方を一緒に実行します)。このような場合、私はマーティンのメタOPを使用しています。(そして彼が19の賛成投票と0の反対投票で参照した投稿)
Level River St

誰かがこれが有用であると感じる場合、文字列の先頭から各入力単語を一意に識別した文字列は「l、r、ha、e、c、ox、ol、ot、nd、uli、il、im 、ik、ov、s、ap、ue、o、ie、ang、n、i、h、-、a、u "
fəˈnɛtɪk

1
出力の意図を理解できていません。入力としてマングルバージョンがある場合を除いて、それは単なる正確な音声テキスト(または行配列)kolmogorov複雑さスタイルですか?
xnor 2017

3
@xnorランダムに選択されたふりがなのアルファベットがランダムに選択された場合は、順番に返す必要があります。その場合、固定テキストは有効な出力ではありません。
fəˈnɛtɪk 2017

回答:


4

ゼリー、21バイト

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"

入力と出力は文字列配列です。

オンラインでお試しください!

バックグラウンド

26個ありますが= 403291461126605635584000000異なる入力、入力をソートできるため、この音声アルファベットの1つの順列のみを処理する必要があります。辞書式にソートすると、

-ray
ango
ankee
apa
cho
elta
harlie
hiskey
ictor
ierra
ike
ilo
ima
lfa
ndia
niform
olf
omeo
otel
ovember
oxtrot
ravo
scar
uebec
uliett
ulu

この配列にインデックスを付けて、削除された文字で並べ替えることができます。(1ベースの)インデックスは

14 22  7  6  5 21 17 19 15 25 12 13 11 20 23  4 24 18 10  2 16  9  8  1  3 26

あとは、結果の文字列の前にアルファベットの大文字を追加するだけです。

使い方

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"  Main link. Argument: A (string array)

“ṣȤW¶¬þḷẒ⁶4ẹ’          Replace the characters by their indices in Jelly's code page
                       and convert the result from bijective base 250 to integer.
                       This yields k := 214215675539094608445950965.
             Œ?        Construct the k-th permutation (sorted lexicographically)
                       of [1, ..., n], with minimal n (26 here). This yields
                       [14, 22,  7,  6,  5, 21, 17, 19, 15, 25, 12, 13, 11,
                        20, 23,  4, 24, 18, 10,  2, 16,  9,  8,  1,  3, 26].
                Ṣ      Yield A, sorted.
               ị       For each j in the array to the left, select the j-th string
                       from the array to the right.
                 ØA    Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
                   ;"  Concatenate zipwith; prepend the j-th character from the
                       alphabet to the j-th string of the permuted input.

1
それはあなたがどれだけうまくゴルフをすることができるか私を驚かせます...
クリストファー


2

JavaScript、169/195バイト

169バイトをソートする前に最初の文字を置き換えることができる場合

x=>x.map(k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return String.fromCharCode(i+64)+k}).sort()

オンラインでお試しください!

最初の文字を追加する前にソートを行う必要がある場合195バイト

x=>x.sort((a,b)=>g(a)-g(b)).map(a=>String.fromCharCode(g(a)+64)+a)
g=k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return i}

オンラインでお試しください!

これらの各プログラムの完全な20バイトは、文字を取り戻すためのString.fromCharCode()です...

別の69バイトは、発音アルファベットの各単語の始まりを一意に識別する文字列です。

最初の例の説明

for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split[i++]))return i

ここでハードコーディングされた文字列は、最初の文字が削除された後に音声アルファベットワードを開始する一意の識別文字のリストに分けられます。

return String.fromCharCode(i+64)+k

この情報は、開始文字を戻すために、文字列がアルファベットに該当するインデックスを見つけるために使用されます。

.sort()

JavaScriptは暗黙的に文字のASCII値によって文字列としてソートします

2番目の例の説明

関数g = k => ...は、文字列が表音アルファベットに該当するインデックスを検索します。

.sort((a,b)=>g(a)-g(b))

g(...)を実行して返された数値で文字列を並べ替えます

.map(a=>String.fromCharCode(g(a)+64)+a)

各表音文字列の最初の文字を置き換えます


なぜ.sort()あなたの169バイトの答えですか?質問には「3.各単語の元の最初の文字を復元する」と記載されていますが、出力もソートする必要があることについては触れられていません。
Kevin Cruijssen 2017

@KevinCruijssenあなたの目標は、現在ある文字だけを使用して単語を元の順序に戻すことです。言い換えると、「[A] lfa」が「[B] ravo」の前にくる方法などを調べます。あなたのコードは、元のリスト、インデックスキーなどを参照してはなりません
fənɛtɪk

ああ、第2弾の一部を読み間違えました。コードを編集します。
Kevin Cruijssen 2017


1

05AB1E29 27バイト

.•C5ê™вrΓ˜3åóMîõxÿ•uS|{)øJ{

オンラインでお試しください!

.•C5ê™вrΓ˜3åóMîõxÿ•uS       # Push exploded XTYPEDCWVSMKLAIUGRHNFBOQJZ.
                     |{)    # Push input in array, sorted.
                        øJ{ # Zip together, join, resort.

-2エミニャの魔法のおかげで.•


で文字列を作成することもできます.•C5ê™вrΓ˜3åóMîõxÿ•u
Emigna 2017

それはA-Za-z0-9代わりにを使用してインデックス付けされたキースペース0-9A-Za-zですか?
Magic Octopus Urn

これは、<space> az
Emigna

0

Java 7、169バイト

import java.util.*;List c(List l){Collections.sort(l);int i=0;for(Object s:l)l.set(i,""+"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)+l.get(i++));Collections.sort(l);return l;}

ここで試してください。

説明:

import java.util.*;                            // Import used for List and Collections

void c(List l){                                // Method with list parameter and no return-type
  Collections.sort(l);                         //  Sort the given list
  int i=0; for(Object s:l)                     //  Loop over the Strings in the list
    l.set(i,""+                                //   Replace the String-item in the list with:
      +"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)  //    The leading capital character
      +l.get(i++);                             //    Followed by itself
                                               //  End of loop (implicit / single-line body)
}                                              // End of method

元の順序で返す必要があります(アルファブラボーチャーリー...)
fəˈnɛtɪk 2017

それ169作り、18バイトのコストで固定fənɛtɪk@
ケビンCruijssen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.