Mieszkańcy Flapusa używają systemu liczbowego base-8. Liczby to:
0 - Kuzla
1 - Ponara
2 - Boqkel
3 - Colopee
4 - Vruenat
5 - Foham
6 - Stikty
7 - Kricola
W przypadku liczb powyżej 7 pierwsza jest pełna nazwa ostatniej cyfry, po której następuje apostrof i pierwsze znaki drugiej cyfry, aż do pierwszej samogłoski:
11 - Ponara (1) „po (1)
13 - Colopee (3) 'po (1)
64 - Vruenat'sti
55 - Foham'fo
47 - Kricola'vru
Gdy liczby rosną, formuła pozostaje niezmienna - na pierwszym miejscu znajduje się pełna nazwa ostatnia cyfra, a następnie apostrof i pierwsze znaki pozostałych cyfr, aż do pierwszej samogłoski. Pamiętaj, że oprócz ostatniej cyfry (pierwszego słowa) kolejność pozostaje taka sama.
123 - Colopee (3) 'po (1) bo (2)
205 - Foham (5)' bo (2) ku (0)
1123 - Colopee'popobo
7654 - Vruenat'kristifo
Wyjątkiem od reguły są liczby kończące się na 0. Tutaj słowo zaczyna się od Ku i jest uzupełnione pierwszymi literami pozostałych cyfr, aż do pierwszej samogłoski włącznie. Nie stosuje się apostrofu.
10 - Kupo
70 - Kukri
350 - Kucofo
630 - Kustico
1000 - Kupokuku
Wyzwanie
Napisz program lub funkcję, która akceptuje prawidłowy numer base-8 i wyświetla wypowiadany odpowiednik. Możesz założyć, że zawsze otrzymasz prawidłowy numer. Końcowy biały / pojedynczy znak nowej linii po odpowiedzi jest w porządku. Pierwsza postać musi składać się z wielkich liter, jak na przykładach.
To jest golf golfowy . Najkrótszy kod w bajtach wygrywa. Obowiązują standardowe luki. Odpowiedzi, których długości są konwertowane i dodatkowo przesyłane w języku flapussian, otrzymują dodatkowe pliki cookie.
Przypadki testowe
0 -> Kuzla
1 -> Ponara
2 -> Boqkel
3 -> Colopee
4 -> Vruenat
5 -> Foham
6 -> Stikty
7 -> Kricola
10 -> Kupo
11 -> Ponara'po
23 -> Colopee'bo
56 - > Stikty'fo
70 -> Kukri
100 -> Kupoku
222 -> Boqkel'bobo
2345 -> Foham'bocovru
Odpowiedzi:
Pyth, 117 bajtów (Kricola'popo)
Ręcznie transponowany do pseudokodu pythonowego:
źródło
if ... else
trójskładnik, zmieniającfor
pętlę wmap
operację, a następnie wprowadzając niewielkie zmiany. Oto co mam. Chciałbym również zwrócić uwagę na to,."
które mogą być użyte na skompresowanych ciągach.Retina , Colopee'pokri,
165157143127123 bajtówKońcowe podawanie linii jest znaczące.
Wypróbuj online!
Wyjaśnienie
Zaczynamy od przeniesienia cyfry końcowej na przód i wstawienia apostrofu po niej. Zauważ, że pozostawia to liczby jednocyfrowe bez zmian, ponieważ regex się nie zgadza - więc one nigdy nie otrzymują apostrofu.
Zastępuje każdą cyfrę pełną nazwą, niezależnie od tego, gdzie się pojawia.
Skraca to wszystkie nazwy cyfr pojawiające się po apostrofie. Zauważ, że tylko samogłoski
iou
pojawiają się najpierw w nazwie cyfrowej, więc sprawdzamy pozycję tuż za jedną z nich i po apostrofie, a następnie dopasowujemy (i usuwamy) wszystkie małe litery następujące po tej pozycji. Ponieważ wstawiliśmy nazwy cyfr w tytule, zatrzyma się przed następną cyfrą.Wykorzystuje transliterację, aby zamieniać wszystkie wielkie litery
L
na ich małe literyl
, pod warunkiem, że zostaną znalezione w dopasowaniu rozpoczynającym się od'
(w celu pozostawienia wiodącej stolicy nietkniętej).Pozostała tylko poprawna obsługa wielokrotności (ósemkowej) 10. W takim przypadku otrzymamy wynik zaczynający się od
Kuzla'
, od którego chcemy zacząćKu
. Więc po prostu usuwamy wszystkie wystąpieniazla'
.źródło
JavaScript (ES6), 171
Test
źródło
Java (1.8) - Vruenat'fobo (
486340 bajtów)Właśnie kiedy pomyślałem, że nie mogę już dłużej grać w golfa, znalazłem kolejne 33 bajty! Bardzo zadowolony! Największe oszczędności dotyczyły przejścia na tablice znaków (krótsze na wielkie / małe) i ponownego użycia tablicy ciągów wejściowych dla słów.
Odkrywanie mnóstwa sztuczek golfowych, nawet poniżej 400! Teoretycznie mógłbym jeszcze bardziej to zmniejszyć, ponieważ powiedziałem, że funkcja będzie odpowiednia w regułach, podczas gdy jest to pełny program.
Zaktualizowałem Korzystając z podejścia Martina Büttnera, zrezygnowałem z użycia wyrażenia regularnego. Udało się zaoszczędzić kolejne 10 bajtów! Dzięki Martin.
Bez golfa
źródło
interface F
i usunąć deklarację publiczną dotyczącą głównej metody. Możesz także usunąć miejsce wewnątrzString[] x
i na zewnątrz.substring(0, v+1)
."Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")
ma 70 bajtów, a wbudowana tablica to 74.Python (3.5)
225222217202 bajtówDziałające rozwiązanie ze zrozumieniem listy w Pythonie
Wyjaśnienie
Wygraj 3 bajty w wersji podzielonej (poprzednia wersja
d="Kuzla","Ponara",...
:)Inicjalizacja wyniku w funkcji ostatniej cyfry
Zmień listę d, aby zachować pierwsze 2 lub 3 znaki i umieścić małe litery
Kot ciąg
źródło
JavaScript ES6,
231228225222204 bajtyZaoszczędził sporo bajtów dzięki Neilowi.
źródło
[...s]
zamiasts.split``
;b=b==c[0]?"Ku":b+"'"
zamiastif(b==c[0]){b="Ku"}else b+="'"
; podobnie dlaif(a.length)
(po prostu użyj0
dlaelse
części);a.map(d=>b+=c[d].match...)
zamiast bawić się zfor
ishift
. Myślę, że to już 29 bajtów zapisanych.[iou]
jako klasy „samogłoskowej”.F #,
364288250 bajtów (Kubofo)Zwraca funkcję, która przyjmuje liczbę całkowitą i zwraca jej odpowiednik Flapus. = D.
źródło
Python 3 -
181177 bajtów (Ponara'bosti)Uważaj na najbardziej niesamowite wykorzystanie
pow
, jakie kiedykolwiek zobaczysz w całym swoim życiu.u**v
jest równoważne w kontekście boolowskim, ponieważu|(not v)
wcześniej grało w golfa do miłego~v+2|u
wyrażenia!źródło